如何将Unicode字符串转换为ISO?

时间:2013-05-16 12:53:04

标签: java unicode encoding iso

请帮助,我必须打印从数据库(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无法检测到{{1}这样的unicode字符因为开头的"\u00fc"

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

2 个答案:

答案 0 :(得分:1)

  

我尝试了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字符串时。单个反斜杠变为" \\"。再说一次:4个反斜杠插入一个。

答案 1 :(得分:1)

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

import org.apache.commons.lang.StringEscapeUtils;

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