2016-02-05 50 views
-1

我有一個java字符串處理這個值:轉換Windows 1252的Java

=C3=A1 =C3=A0 =C3=A7 =C3=A3 =C3=B5 =C3=A9 =C3=9A =C3=81 =C3=A2 =C3=A9 UHA a=C3==A7=C3=A3 

我認爲這是編碼與Windows 1252。我想將其轉換爲可讀的字符串。我試圖使用UTF-8進行轉換,但無法正常工作。有人可以幫助我嗎?

+0

[Java轉換Windows-1252到UTF-8,一些字母錯誤]的可能的重複(http://stackoverflow.com/questions/23082522/java-convert-windows-1252-to-utf-8-some -letters-are-wrong) – dezhik

+0

你從哪裏得到這個字符串?它看起來不像是一個UTF問題。 –

+0

我嘗試了http://stackoverflow.com/questions/23082522/java-convert-windows-1252-to-utf-8-some-letters-are-wrong,但對我無效。 – brunoroberto

回答

2

該字符串包含charcaters,編碼爲Quoted-Printable

部分=C3=A1是編碼爲UTF-8的á

顯示解碼的小片段。

String hexChars = "ABCDEF"; 
String s = "=C3=A1 =C3=A0 =C3=A7 =C3=A3 =C3=B5 =C3=A9 =C3=9A" 
     + " =C3=81 =C3=A2 =C3=A9 UHA a=C3=A7=C3=A3"; 
int stringIndex = 0; 
int bytesIndex = 0; 
byte[] bytes = new byte[s.length()]; 
while (stringIndex < s.length()) { 
    if (s.charAt(stringIndex) == '=' 
      && hexChars.indexOf(s.charAt(stringIndex+1)) >= 0 
      && hexChars.indexOf(s.charAt(stringIndex+2)) >= 0 
      ) { 
     int hex = hexChars.indexOf(s.charAt(stringIndex+1)); 
     hex <<= 4; 
     hex += hexChars.indexOf(s.charAt(stringIndex+2)); 
     bytes[bytesIndex] = (byte) hex; 
     stringIndex += 2; 
    } else { 
     bytes[bytesIndex] = (byte) (s.charAt(stringIndex) & 0XFF); 
    } 
    stringIndex++; 
    bytesIndex++; 
} 
System.out.println("bytes = " + new String(bytes, 0, bytesIndex, 
     StandardCharsets.UTF_8)); 

輸出

bytes = á à ç ã õ é Ú Á â é UHA açã 

的片段是僅用於演示目的。看看一個庫,它可以爲你做引用打印的解碼。

+0

由於字節數據的長度比字符串的長度短,因此您的字節數組具有尾隨零字節。你應該使用'new String(bytes,0,bytesIndex,StandardCharsets.UTF_8)'。 – VGR

+0

它的工作,謝謝!唯一的問題是,信ç'不起作用,但謝謝! – brunoroberto

+1

@VGR你是對的。即使代碼僅用於演示目的,但它不應該有這樣的錯誤。感謝您的評論。代碼已相應更改。 – SubOptimal

相關問題