将具有十进制格式的Unicode字符(html编码)的字符串转换为常规字符串

时间:2014-06-13 11:38:26

标签: java string unicode hashmap

我有一个Map类型的变量。

if (sourceMap.containsKey(currentRow)) {
    //Remove the row from Map
} else {
    //Mismatch
}

其中sourceMap是一个包含许多字符串的Hashmap变量,例如

Period Name
Person Last Name
Person First Name
Order Code
Ship_to_Customer_Name
Sub_Profit_Center
Commission Amount
Credit Amount
Rate Amount
Apr-09
Morgan
Martin
1022334852
Carl Zeiss de M&# 195;&# 189;xico, S.A. de C.V.(no space after the # in the string)

currentRow包含以下字符串:

Carl Zeiss de Mýxico, S.A. de C.V.

与最后一行相同。我的要求是它应该匹配。现在它不匹配。我必须做什么转换来匹配那些

这些字符串来自不同的文件 第一个下载为CSV,因此没有unicode字符......第二个(currentRow)以unicoded txt格式下载,并使用dos2unix转换为CSV ..

2 个答案:

答案 0 :(得分:1)

Carl Zeiss de Mýxico, S.A. de C.V.

这是一个包含HTML编码字符的字符串。您可以使用unescapeHtml4等实用程序函数执行HTML-unescape。

通常,您希望将字符串保留为原始格式,而不是使用HTML-escape。看看你得到sourceMap的地方 - 如果你控制了它并且可以修复它,避免无偿逃脱那么这就行了。另请注意,Mýxico,无论是否为HTML编码,都看起来像是堆栈中其他位置错误处理Unicode字符的证据。

答案 1 :(得分:0)

首先,我们必须从以下网址http://www.java2s.com/Code/Jar/c/Downloadcommonlang3jar.htm

下载jar文件

现在添加import语句如下

import static org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4;

现在我们需要使用我们想要转义html编码字符串的方法。 例如:

String s=Carl Zeiss de Mýxico, S.A. de C.V.
System.out.println("Before: "+s);
s=unescapeHtml4(s);
System.out.println("After: "+s);

现在输出如下

Before: Carl Zeiss de Mýxico, S.A. de C.V. 
After: Carl Zeiss de Mýxico, S.A. de C.V.