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



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

String bankName = "u0627u0644u0628u0646u0643 u0627u0644u0645u062au062du062f";

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

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

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

 u0627u0644u0628u0646u0643 u0627u0644u0645u062au062du062f

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

那么我该如何实现这一目标。

这一行:

String bankName = "u0627u0644u0628u0646u0643 u0627u0644u0645u062au062du062f";

完全等同于这个:

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);

将打印:

内容为""

在介绍之后,您应该了解为什么它不起作用:您将转义字符串存储在数据库列中,但正如我们所说,取消义仅由编译器执行,并且您得到的正是您存储的内容。

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

如果你不能改变它,并且你已经使用了Apache Common Lang,你可以使用一个实用程序函数来执行取消转义:

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

当然,我不建议只使用它(它很小),如果你需要它,请查看tchrist在如何在Java中取消转义Java字符串文字中的答案。

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

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

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

相关内容

  • 没有找到相关文章

最新更新