有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

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

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

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

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

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

那么我如何才能做到这一点呢


共 (1) 个答案

  1. # 1 楼答案

    这一行:

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

    完全等同于:

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

    转义(例如,想想about \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'
    

    在这篇介绍之后,您应该理解为什么它不起作用:您正在数据库列中存储一个转义字符串,但是,正如我们所说的,转义只由编译器执行,并且您可以准确地获得存储的内容

    如果可以的话,我建议您只需在数据库列中存储“النكامتد”

    如果您无法更改,并且已经使用了Apache Common Lang,则可以使用实用程序功能执行取消逃避:

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

    当然,我不建议只使用它(它几乎很小),如果你需要它,请在How to unescape a Java string literal in Java中查看tchrist的答案