我需要你帮助显示一些存储在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页面中,不会用阿拉伯语给出它的值。
那我怎么能做到这一点。
答案 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_arabic").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