在Java中,为什么Character.toString((char) 65533)
会打印出这个符号: ?
我有一个Java程序,可以在任何地方打印这些字符。这是一个很大的计划。关于我可以采取哪些措施来避免这种情况?
答案 0 :(得分:10)
最可能的情况之一是您尝试使用UTF-8字符集读取ISO-8859数据。如果您遇到一系列无效的UTF-8字符,那么它将被替换为 符号。
检查输入流,并确保使用正确的字符集读取它们。
答案 1 :(得分:8)
在java中,为什么Character.toString((char)65533)会打印出这个符号: ?
因为确切的特定字符 IS 与特定的codepoint相关联。它似乎不显示随机字符。
我有一个java程序,可以在任何地方打印这些字符。这是一个很大的计划。关于我可以采取哪些措施来避免这种情况?
你的问题出在其他地方。至少可以归结为你应该设置每一步,其中涉及byte
- char
次转换(在文件/ db中存储文本,从文件/ db中读取文本,操作文本,传输文本,显示文本等等,以使用UTF-8
。
引起我注意的是,Java对0xFFFD
绝对没有什么特别之处,它只是用问号?
取代了未覆盖的字符,而且你坚持认为0xFFFD
来了来自Java。我知道Firefox完全按照你说的去做,所以你可能会把“Firefox”与“Java”混淆吗?
如果这是真的并且您实际上在谈论Java Web应用程序,那么您需要至少将HTTP响应编码设置为UTF-8
。您可以通过将<%@ page pageEncoding="UTF-8" %>
置于相关JSP页面的顶部来实现。您可能会发现this article对于获取更多背景信息以及解决此“Unicode问题”所需的所有步骤和解决方案的详细概述非常有用。
答案 2 :(得分:2)
没有Unicode字符U + FFFD。因此,代码在逻辑上是不正确的。 Unicode替换符号的预期用途将被替换为错误输入(例如(char)65533
)。
如何修复它:不要将垃圾放入字符串中。字符串用于文本。字节用于随机二进制数据。
答案 3 :(得分:1)
那么,你想要它做什么?如果您将这些字符“遍布整个地方”,我怀疑您的数据不好......您收到无法用Unicode表示的数据应该非常罕见。
您如何获取数据?
答案 4 :(得分:1)