gpt4 book ai didi

Java 字符串编码 - Linux 与 Windows 不同

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:10:08 24 4
gpt4 key购买 nike

我已经创建了一个 Java 程序 (REST) 服务。整个开发/测试是在 Windows 上完成的,现在正在部署到生产测试中。但是,出现了“小”编码问题:

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 上,在具有 auth 插件的 apache 后面)接收到一些我必须处理的值。它们的编码方式与您在第 1 行中看到的一样。(此值显示在 Windows 和 Linux 上)。

当我像第 1 行一样将它转换为 UTF-8 并将其写入日志文件 (log4j) 时,我的 Windows 机器上有术语“grün”(这是正确的)。在 Linux 服务器上,我仍然有相同的输出。

然后我尝试直接使用 Umlaute(üäö 等),就像在第 2 行中一样,在 Windows 和 Linux 上,该值都被正确写入日志文件。然后我尝试像第 3 行那样进行一些转换,但是,结果相同:两个操作系统显示相同的结果。

两台机器在 Java 中具有相同的语言环境 (Locale.getDefault()) -> 我已经试过了。我无法更改将值插入 HTTP 请求的方式!

最佳答案

Both machines have the same Locale in Java (Locale.getDefault()) -> I tried that already.

它是默认字符集,而不是默认语言环境,它决定了在解码/编码没有指定字符集的字符串时使用什么字符集。

检查 Charset.defaultCharset().name() 在您的 Windows 和 Linux 机器上返回的内容。根据您报告的症状,我预计它们会有所不同。

关于Java 字符串编码 - Linux 与 Windows 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38591929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com