【发布时间】:2010-01-17 06:51:00
【问题描述】:
我必须在 Java 程序中打印一个非英语字符串。我有绳子。如何获取其组成字符的 unicode,以便将字符串嵌入程序中?
【问题讨论】:
我必须在 Java 程序中打印一个非英语字符串。我有绳子。如何获取其组成字符的 unicode,以便将字符串嵌入程序中?
【问题讨论】:
您在哪个代码页中有该字符串? Java 源代码可以采用任何编码,因此您可以将该字符串直接放在源代码中并使用编译器的选项来设置代码页。请参阅 NetBeans -> 项目节点 -> 属性 -> 源 -> 编码。
【讨论】:
源文件正在使用“MacRoman”进行编码(从项目属性 -> 资源 -> 文本文件编码中找到)。我将其更改为“UTF-8”,然后尝试将实际的非英语字符串嵌入到程序中并尝试打印。成功了。
您可能在保存或编译期间损坏了数据。源代码不携带任何内在编码信息,因此很容易损坏包含基本“ASCII”范围之外的字符的字符串文字。考虑在源文件中使用Unicode escape sequences 以避免此问题。 您要么这样做,要么确保与源接触的任何人始终适当地处理它 - 第一种方法更容易。
如果这是用于商业应用程序,请考虑将字符串外部化到资源文件中。
【讨论】:
\u00C0) 这样的字符将分别存储为字节 C3 80、CB 和 C0。将文件复制到另一台 PC 需要您记录编码,以便其他人可以正确编辑和编译代码。这不是一个大问题 - 如果您正在编写非英语应用程序,这可能是最好的方法。
正如之前的答案所说,您绝对可以直接在源文件中编写包含无法以传统 ISO-8859-1 或 US-ASCII 字符集编码的字符的字符串。您确实需要确保您的 IDE 将文件保存为 UTF-8。而且,您可能需要在 javac 命令中添加“-encoding UTF-8”以确保 javac 正确读取它。
但我想你想知道如何使用“\uXXXX”语法嵌入字符串,也许是为了避免源文件编码的任何问题。这个短代码 sn-p 可能对你有用;它粗略地假设任何 UTF-16 值超过 255 的字符都需要转义。
public static void main(String[] args) {
String s = args[0];
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
int value = (int) c;
if (value < 256) {
System.out.print(c);
} else {
System.out.print("\\u" + Integer.toHexString(value));
}
}
}
【讨论】:
python -c "print repr('text goes here'.decode('utf-8'))"
它可能并不总是'utf-8',但这是一个合理的起点。
【讨论】:
.decode(),请删除字符串文字开头的u。你得到的第一个输出是 UTF-8 格式的字符串。