-2

请帮助,我必须将来自数据库(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都附带了,所以我不能像一开始那样检测到 unicode 字符。"\\""\"Uygulama g\\u00fcvenli\\u011fi ileStringEscapeUtils.escapeHtml"\u00fc""\"

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

4

2 回答 2

1

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

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

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

它产生:

Uygulama g\u00fcvenli\u011fi ile

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

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

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

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

于 2013-05-16T13:57:07.640 回答
1

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

import org.apache.commons.lang.StringEscapeUtils;

String unicodeEscapedStr = myBean.getTitle();
String unicodeStr = StringEscapeUtils.unescapeJava(unicodeEscapedStr);
String isoString = StringEscapeUtils.escapeHtml(unicodeStr);
于 2013-05-16T14:25:26.057 回答