当我使用Hibernate在我的数据库中获取实体时,返回的字符串编码很差。该数据库是Oracle 11g。
示例:
2015.2 Ajout d’un point de contrôle
返回为:
2015.2 Ajout d\u0092un point de contrôle
我在hibernate.cfg.xml中尝试了一些设置:
<property name="hibernate.connection.defaultNChar">true</property>
<property name="hibernate.connection.useUnicode">true</property>
<property name="hibernate.connection.CharSet">utf-16</property>
<property name="hibernate.connection.characterEncoding">utf-16</property>
但没有成功。
以下是数据库设置:
NLS_CHARACTERSET WE8MSWIN1252
NLS_NCHAR_CHARACTERSET AL16UTF16
包含数据的行被描述为VARCHAR2(255字节)
如何将正确编码的字符串返回给我的实体?
答案 0 :(得分:0)
在将数据插入数据库之前,这看起来很糟糕。 \u0092
不是Unicode中的有效代码点,但它存在于Windows-1252 (CP1252)中。这表明有人将带有Windows编码的数据插入到数据库中,而不是首先将字符转换为正确的Unicode。
此类问题的常见原因是当您在未指定编码的情况下读取文本文件或在将字节编码/解码为字符串时依赖平台默认字符集时。