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

时间:2015-06-16 13:27:14

标签: java unicode utf-8 xhtml arabic

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

namespace ET\Bundle\UserBundle\Controller\SecurityController
当我打印变量输出String bankName = "\u0627\u0644\u0628\u0646\u0643 \u0627\u0644\u0645\u062a\u062d\u062f"; 时,在xhtml中

,阿拉伯语文本正确显示<h:outputText value="#{hrd.bankName}" style="font-weight:bold" />,但是unicode的相同值存储在数据库字段中,我正在检索值它来自以下代码:

"البنك المتحد"

xhtml会将阿拉伯文字显示为文字:

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

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

那我怎么能做到这一点。

2 个答案:

答案 0 :(得分:1)

这一行:

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'

介绍之后,你应该明白为什么它不起作用你正在做什么:你在数据库列中存储转义字符串,但是,正如我们说,unescaping只能由编译器执行,你可以得到你存储的内容。

如果你能建议你只在你的数据库专栏中存储“البنكالمتحد”。

如果您无法更改并已使用 Apache Common Lang,您可以使用实用程序功能执行转义:

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

当然我不会建议仅将它用于此(它只是小的),如果需要,请在tchrist中查看How to unescape a Java string literal in Java的答案。

答案 1 :(得分:-1)

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

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

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