繁体   English   中英

tomcat/spring 服务器 REST 输入编码错误

[英]Wrong encoding for tomcat/spring server REST input

我有使用 Tomcat 8 和 Spring v5.3.18 制作的 REST 服务。 该服务获取一个字符串并将其存储在数据库中。

我对此输入有疑问:

{"name": "Pawe\u0142"}

它是一个有效的 UTF8 字符。 保存的字符串是Pawe? 所以有什么不对...

我开始检查可能是缺少编码的地方,但我发现它取决于 tomcat 环境。 具有相同软件的两台服务器,链接到一个公共数据库但具有不同的操作系统,第一个是 Linux,第二个是 Windows 有不同的响应。

Windows 服务器正在工作并存储有效的 UTF8 字符,linux 服务器不工作并将字符存储为“?”。

所以我推断它与软件或软件配置中缺少编码无关,但可能与 tomcat 或 java 有关。

你知道什么是错误的吗?

可能的原因可能是LC_CTYPE linux 语言环境或file.encoding JVM 属性:

  • Linux LC_CTYPE(或 LC_ALL)区域设置为 UTF-8 以外的区域。模拟为

    LC_CTYPE="ISO-8859-1" jshell jshell> import java.nio.charset.Charset; jshell> Charset.defaultCharset() $2 ==> US-ASCII jshell> String a = "adf ł"; a ==> "adf?"
  • JVM 的file.encoding属性设置为 UTF-8 以外的值

    jshell -J-Dfile.encoding="ISO-8859-1" --execution="local" jshell> import java.nio.charset.Charset; jshell> Charset.defaultCharset() $2 ==> ISO-8859-1 jshell> String a = "adf ł"; a ==> "adf?" jshell -J-Dfile.encoding="UTF-8" --execution="local" jshell> String a = "adf ł"; a ==> "adf ł"

Linux 快速测试

java -Dfile.encoding="ISO-8859-1" -XshowSettings:properties -version 2>&1 | grep 'encoding'
    file.encoding = ISO-8859-1
    sun.io.unicode.encoding = UnicodeLittle
    sun.jnu.encoding = UTF-8

java -XshowSettings:properties -version 2>&1 | grep 'encoding'
    file.encoding = UTF-8
    sun.io.unicode.encoding = UnicodeLittle
    sun.jnu.encoding = UTF-8

ps -lf -C jshell | grep 'file.encoding'
0 S lmc      7266  2225 10  80   0 - 895886 -     14:48 pts/2    00:00:05 jshell -J-Dfile.encoding=ISO-8859-1 --execution=local


LC_ALL="es_ES.ISO-8859-1" java -help 2>&1 | tail -n-3
Para especificar un argumento para una opci�n larga, puede usar --<nombre>=<valor> o
--<nombre> <valor>.

最后,错误出现在 DB / JDBC 的连接字符串中。

对于 Mysql 驱动程序,我必须将一些参数传递给连接字符串 URL append:

dbConnectionString=jdbc:mysql://localhost/test?useSSL=false&useUnicode=true&characterEncoding=utf-8

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM