由于-Dfile.encoding,使用Play2,Ebean,Akka actor和SQL Server进行了错误的字符编码。真?

时间:2018-06-12 17:09:35

标签: sql-server character-encoding ebean playframework-2.6

我正打算写一个SOS问题,但我终于找到了一个解决方案......我不明白。所以这个问题将是:有人可以解释一下吗?

我的应用:播放2 Ebean 持久性, MS SQL Server 2012

Akka actor 中,我使用Ebean Entity读取文件并将内容存储在数据库中。没什么了不起的......

文件编码 UTF-8 。即使我试图将所有内容都放在UTF-8中,我也会用

读取文件
new InputStreamReader(new FileInputStream(theFile), "UTF-8")

UTF-8不是硬编码的,它是从配置文件中读取的,但我检查过(两次或更多次),值实际上是UTF-8。

我对数据库没有任何控制权。 数据库排序规则为 FRENCH_CI_AS

如果我使用-Dfile.encoding=UTF-8运行我的应用,则持久性无法在数据库中正确编码é?替换 如果我错了,请纠正我,但这是典型的UTF-8读作ISO-8859-1问题。在调试中,我可以检查文件读取,它似乎是正确读取,没有编码问题。

如果我使用-Dfile.encoding=ISO-8859-1运行我的应用,一切正常

此外,在这两种情况下,如果我通过基本表单,控制器和我的存储库持续一些重音,我就没有持久性问题。只有当我在阅读文件后坚持使用actor时才会出现问题。但是再次,我在调试和日志中检查了两次,é似乎从文件中正确读取。

最后,如果我用错误的编码读取文件

new InputStreamReader(new FileInputStream(theFile), "ISO-8859-1")

并使用-Dfile.encoding=UTF-8运行我的应用,我的akka​​演员工作正常,我可以阅读数据库中的é ...

所以我真的很困惑,我不明白发生了什么。有人可以解释一下吗? :(

注意:我使用SQL Server Management Studio检查数据库内容。确实有一些?,我也可以在我的应用页面中查看它。

0 个答案:

没有答案