【发布时间】:2020-01-08 11:41:59
【问题描述】:
我正在开发一个 JavaFX 应用程序。我需要使用波斯语作为节点名称以编程方式创建TreeView。
问题是我在运行应用程序时看到奇怪的字符。我已经在网上搜索过同样的问题。我编写了一个函数来根据同一问题的答案进行编码:
public static String getUTF(String encodeString) {
return new String(encodeString.getBytes(StandardCharsets.ISO_8859_1),
StandardCharsets.UTF_8);
}
我用它来转换我的字符串来构建TreeView:
CheckBoxTreeItem<String> userManagement =
new CheckBoxTreeItem<>(GlobalItems.getUTF("کاربران"));
此答案不适用于某些字符:
我仍然得到奇怪的结果。如果我不使用编码,我会得到:
【问题讨论】:
-
这个解决方案太可怕了,完全删除它。 “我看到奇怪的字符” -> 更具体,让我们找出编码问题在哪里,然后消除编码问题而不是尝试清理它。
-
您的
getUTF方法是不必要的,并且可能是有害的。String已经是一个解码的字符序列。在实际将字符序列转换为字节时,您只需要担心编码,反之亦然;例如,在读取或写入外部位置(例如文件、网络等)时。请注意,如果您的 Java 源代码中有字符串文字,请确保源文件和javac都使用适当的编码(请参阅 Joop 的答案)。 -
@Slaw 我应该如何检查源文件和
javac是否使用适当的编码。我正在使用 IntelliJ。 -
注意:Java(和 JavaScript、.NET、VB4/5/6 等)中的文本数据类型(
String、char)是 UTF-16 代码单元的计数序列。 UTF-16 是 Unicode 字符集的字符编码。因此,您自然而然地找到的代码毫无意义。 (通过适当的 cmets 和命名,它可以用来解开非常扭曲的编码方案。)
标签: java string javafx encoding character-encoding