Sql server 将中文保存在数据库中并导出到Excel中

Sql server 将中文保存在数据库中并导出到Excel中,sql-server,hibernate,spring-mvc,apache-poi,Sql Server,Hibernate,Spring Mvc,Apache Poi,我有一个网站(Spring+Hibernate+MS SQL Server),它接受用户输入的繁体中文,并将其保存在数据库中。例如,用户可以输入以下内容: 31~40歲 我注意到它在数据库中保存为以下内容 31~40歲 请注意,保存的文本可以正确检索并显示在浏览器中。我还使用ApachePOI包将用户输入导出到Excel中但是在Excel中,文本是 31~40歲 不是 在我的导出代码中,我只使用了: cell.setCellValue(_get_

我有一个网站(Spring+Hibernate+MS SQL Server),它接受用户输入的繁体中文,并将其保存在数据库中。例如,用户可以输入以下内容:

31~40歲
我注意到它在数据库中保存为以下内容

31~40歲
请注意,保存的文本可以正确检索并显示在浏览器中。我还使用ApachePOI包将用户输入导出到Excel中但是在Excel中,文本是

31~40歲
不是

在我的导出代码中,我只使用了:

cell.setCellValue(_get_data_from_database_);

我的工作缺少什么?在数据库层?或者在导出到Excel中?

首先,我要检查为什么Unicode字符~全宽波浪形符存储为HTML实体
而汉字存储为Unicode。因为如果将~也存储为Unicode,那么整个问题就会消失。否则你看,阿克塞尔,你说得对。html实体由另一个html健全性工具生成。非常感谢你为我指明了正确的方向!!!不客气!这是一个经常犯的错误。具有特殊含义的字符的转义不能是一般性的,但必须依赖于上下文。在将内容存储到数据库中时,上下文不是HTML而是SQL。因此转义必须在上下文SQL(转义字符在SQL中具有特殊意义)中,而不是在上下文HTML中。但是,在将DB内容插入HTML时,上下文是HTML。因此,转义必须在HTML.Axel上下文中,您可能希望在帖子中总结您的评论。我会选择它作为答案。干杯
cell.setCellValue(_get_data_from_database_);