如何在从数据库检索的页面中显示阿拉伯语 unicode 文本

How to display Arabic unicode text in page that retrieved from database

我需要你的帮助来显示一些存储在 xhtml 页面变量中的阿拉伯文本。我已在 jdeveloper 中配置我的项目以在属性中包含 UTF-8,并且阿拉伯文本已正确显示。我有一个名为 bankName 的变量,它的 unicode 值为:

String bankName = "\u0627\u0644\u0628\u0646\u0643 \u0627\u0644\u0645\u062a\u062d\u062f";

当我打印变量输出 <h:outputText value="#{hrd.bankName}" style="font-weight:bold" /> 时,在 xhtml 中,阿拉伯文本正确显示 "البنك المتحد",但是 unicode 的相同值存储在数据库字段中,我正在检索它的值来自以下代码:

String bankName=result.getString("bank_name_arabic").trim();

xhtml 将阿拉伯文本显示为文本:

 \u0627\u0644\u0628\u0646\u0643 \u0627\u0644\u0645\u062a\u062d\u062f

在 xhtml 页面中,不会给出阿拉伯语的值。

那么我怎样才能做到这一点。

在java中,有些字符有特殊含义。您可以在此处找到有关这些的更多信息:Java Characters 话虽如此,你的字符串应该变成:

\\u0627\\\u0644\\\u0628\\\u0646\\\u0643 \\\u0627\\\u0644\\\u0645\\\u062a\\\u062d\\\u062f

反斜杠\是用来转义字符的符号。这也使它成为一个特殊的符号,所以基本上要触发 \,你需要有 \\。为什么是4?因为前两个代表一个单\,用来转义后面的单\,也是用双反斜杠表示。 HTH

这一行:

String bankName = "\u0627\u0644\u0628\u0646\u0643 \u0627\u0644\u0645\u062a\u062d\u062f";

完全等同于:

String bankName = "البنك المتحد";

转义(例如,考虑 \n)不是 Java 字符串中的内置机制。 Java 编译器为您执行这些替换。假设有一个包含这两个字符的文本文件:\n。如果您这样阅读它们:

Path path = Paths.get("yourFile.txt");
String text = new String(Files.readAllBytes(path), StandardCharsets.UTF_8);

现在可以查看文本内容了:刚好是两个字符:\n 然后:

System.out.format("Content is '%s'", text);

将打印:

Content is '\n'

在这个 介绍 之后你应该明白为什么它不起作用你正在做的事情:你正在存储一个 escaped 字符串在您的数据库列中,但正如我们所说,转义仅由编译器执行,您得到的正是您存储的内容。

如果可以的话,我建议您将“البنك المتحد”简单地存储在您的数据库列中。

如果你不能改变它并且你已经使用 Apache Common Lang你可以使用实用函数来执行反转义:

String bankName = org.apache.commons.lang.StringEscapeUtils.unescapeJava(
    getString("bank_name_arab‌​ic").trim());

当然我不建议仅将它用于此(它几乎很小),如果您需要它,请检查tchrist's answer in How to unescape a Java string literal in Java