无法在字符串响应中显示“ü”

Not able to display "ü" in String response

我有一个场景,我正在将一个字符串写入 ByteArrayOutputStream。我在这里写 Zürich 和 ByteArrayOutputStream 的值是 'Z?rich'.

ByteArrayOutputStream baos = new ByteArrayOutputStream();
String text = "Zürich";
baos.write(jsonResponse.getBytes(StandardCharsets.UTF_8), 0, jsonResponse.getBytes(StandardCharsets.UTF_8).length);

Value of string in debugger Value of baos after writing the string

有没有想过为什么会这样?

所涉及的一切都很好,除了你的调试,它错误地呈现数据,但这不是它的错。

从根本上说,字节就是字节。 这不是文字。期间.

您的调试器仍然向您显示 文本形式的字节数据,其中存在错误。它不是文本,调试器 'wrong' 试图将其显示给您。

然而,它只是一个调试器。它不是最终用户应用程序。它这样做只是为了方便,因为看到“65、34、125、23,...(以及数百个数字)”是毫无用处的。

一袋字节,ByteArrayOutputStream 存储它的方式,'know' 不是文本的编码方式。怎么可能呢?字节的关键在于它们是字节 - 也许它是一个图像文件,也许它是一个密钥文件,也许它是某个游戏或其他游戏的存档。关键是,编码并不是这里故事的一部分。 调试器不可能知道。所以,它猜测。它猜错了。就这些。你不能让它猜对。

解决方案:别再担心这个了。数据很好。该字节序列字母ü,采用UTF-8编码。这里唯一的问题是调试器无法正确呈现它。你无法解决这个问题,提交错误报告毫无意义,因为调试器没有正确执行此操作所需的信息,并且无法轻松获取此信息,也不应该。这只是一个实际问题,如果您的应用程序的最终用户打算读取您的应用程序在那个确切的调试器中所做的结果,这肯定不是这种情况(如果是这样,请停止这样做,那不是当然,您部署应用程序)。