我已经创建了一个Java程序(REST)服务。整个开发/测试是在Windows上完成的,现在部署到生产测试正在进行。然而,有“小”编码的问题出现了:Java字符串编码 - 与Windows不同的Linux
String s3 = new String("grün".getBytes(), "UTF-8");
logger.info(s3);
logger.info("das ist wirklich grün");
logger.info(new String("das ist wirklich grün".getBytes("UTF-8"), "UTF-8"));
我通过HTTP属性(Web应用程序托管在tomcat的,具有权威性的插件Apache的背后)我必须处理几个值接收。它们的编码方式与您在第1行中看到的一样。(此值显示在Windows和Linux上)。
当我把它转换为UTF-8就像在第1行并写入日志文件(log4j)我的Windows机器上有“grün”(这是正确的)。在Linux服务器上,我仍然有相同的输出。
然后我试着直接使用Umlaute(üäöetc),就像第2行一样,并且在Windows和Linux上这两个值都被正确写入日志文件。然后,我尝试像第3行那样进行一些转换,但结果相同:两个操作系统都显示相同的结果。
两台机器都具有相同的Java语言环境(Locale.getDefault()) - >我已经试过了。我无法改变将值插入到HTTP请求中的方式!
是的,谢谢你,这暗示是在正确的方向。 Windows机器使用Windows-1252,而Linux使用UTF-8。 – karlis
使用String s3 = new String(“grün”.getBytes(“windows-1252”),“UTF-8”);诀窍,现在它在Linux机器上也是正确的。然而,我并不是为什么我必须在Linux上使用windows charset,也许这个字符串最初是在Windows机器上创建的...... – karlis
*“...也许该字符串最初是在Windows机器上创建的。”*可能是! –