【问题标题】:How to convert Unicode strings to ISO?如何将 Unicode 字符串转换为 ISO?
【发布时间】:2013-05-16 12:53:03
【问题描述】:

请帮忙,我必须将来自数据库(oracle 存储过程 => 映射到 java 对象)的 unicode 字符串打印到 JSP 页面(使用 stuts1)中,我使用了这个:

String unicodeStr = myBean.getTitle();//return from database the unicode string (something like this : Uygulama g\u00fcvenli\u011fi ile).
String isoString = org.apache.commons.lang.StringEscapeUtils.escapeHtml(unicodeStr);

我的问题是unicodeStr 为每个"\" (Uygulama g\\u00fcvenli\\u011fi ile) 都附带了"\\",所以我的StringEscapeUtils.escapeHtml 无法检测到像"\u00fc" 这样的unicode 字符,因为开头的"\"

我试过unicodeStr.replaceAll("\\","\"),但它无法编译,因为"\"不允许在没有转义的字符串中。

【问题讨论】:

  • 这个“ISO”是什么东西?

标签: java unicode encoding iso


【解决方案1】:

如果您知道数据库中的字符串都存储在 Java 转义变体中,为什么不在将它们转义为 Html 之前简单地对其进行解码?

import org.apache.commons.lang.StringEscapeUtils;

String unicodeEscapedStr = myBean.getTitle();
String unicodeStr = StringEscapeUtils.unescapeJava(unicodeEscapedStr);
String isoString = StringEscapeUtils.escapeHtml(unicodeStr);

【讨论】:

    【解决方案2】:

    我尝试了 unicodeStr.replaceAll("\","\"),但它无法编译,因为“\”在没有转义的字符串中是不允许的。

    您可以像这样替换双反斜杠:

    System.out.println("Uygulama g\\u00fcvenli\\u011fi ile".replaceAll("\\\\\\\\","\\"));
    

    它产生:

    Uygulama g\u00fcvenli\u011fi ile
    

    你可以找到解释here(参见段落正则表达式、文字字符串和反斜杠):

    在文字 Java 字符串中,反斜杠是转义字符。文字字符串“\”是一个反斜杠。在正则表达式中,反斜杠也是转义字符。正则表达式 \ 匹配单个反斜杠。这个作为 Java 字符串的正则表达式变成了“\\”。没错:4 个反斜杠匹配一个。

    正则表达式 \w 匹配一个单词字符。作为一个 Java 字符串,它被写为“\w”。

    在您的 Java 代码中为 String.replaceAll() 之类的方法提供替换字符串作为 Java 代码中的文字 Java 字符串时,也会出现同样的反斜杠混乱。在替换文本中,当您想用实际的美元符号或反斜杠替换正则表达式匹配时,必须将美元符号编码为 \$ 并将反斜杠编码为 \。但是,反斜杠也必须在文字 Java 字符串中进行转义。因此,替换文本中的单个美元符号在编写为文字 Java 字符串时变为“\$”。单个反斜杠变为“\\”。再次正确:4 个反斜杠插入一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-08
      相关资源
      最近更新 更多