2014-06-13 13 views
0

我有一個Map類型的變量。將十進制格式(html編碼)的Unicode字符轉換爲常規字符串

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

其中sourceMap是其中包含許多字符串如

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和一個HashMap變量包含以下字符串:

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

這是一樣的最後row.My要求它應該匹配。我必須做的匹配那些轉換

這些字符串來自不同的文件 第一個被下載爲CSV所以沒有Unicode字符..第二個(currentRow)是以unicoded txt格式下載並使用dos2unix轉換爲CSV。

+5

即「當前行」看起來你已經從二元到文本轉換時,它應用了錯誤的編碼。請提供更多關於價值來源的信息 - 我懷疑您需要儘早解決問題。 –

+0

編碼錯誤'&# 195; &# 189;'與'Ã''不同' – angel

+0

'卡爾蔡司德'M &# 195; &# 189; xico,SA de CV'(即使刪除了實體中的無效空格)與字符串「Carl Zeiss deMáxico,SA de CV'以兩種不同的方式:1.第一種使用(或試圖使用)HTML字符實體(對Java沒什麼特別的),2.第一種在大寫M之前有一個引號'第二個沒有。作爲參考,[Unicode轉義序列](http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.3)in Java看起來像這樣:'\ uXXXX'(其中'X'是一個十六進制數字) –

回答

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

這是一個帶有HTML編碼字符的字符串。您可以使用效用函數(如unescapeHtml4)來執行HTML-unescape。

一般而言,您希望保持原始格式的字符串而不是HTML格式的字符串。看看你在哪裏,你有你的sourceMap - 如果你控制,並可以解決它,避免無謂的逃脫,那麼這隻會奏效。還要注意,Mýxico,無論是否是HTML編碼,看起來都是錯誤處理堆棧中其他位置的Unicode字符的證據。

+0

Greate ...謝謝....它已經working..just curious.will有任何影響其他字符串..我檢查了其他字符串,發現沒有問題,只是爲了澄清我問。 –

0

首先,我們必須從以下網址下載jar文件http://www.java2s.com/Code/Jar/c/Downloadcommonlang3jar.htm

現在添加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. 
相關問題