我有一個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進行轉換,但無法正常工作。有人可以幫助我嗎?
我有一個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進行轉換,但無法正常工作。有人可以幫助我嗎?
該字符串包含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çã
的片段是僅用於演示目的。看看一個庫,它可以爲你做引用打印的解碼。
由於字節數據的長度比字符串的長度短,因此您的字節數組具有尾隨零字節。你應該使用'new String(bytes,0,bytesIndex,StandardCharsets.UTF_8)'。 – VGR
它的工作,謝謝!唯一的問題是,信ç'不起作用,但謝謝! – brunoroberto
@VGR你是對的。即使代碼僅用於演示目的,但它不應該有這樣的錯誤。感謝您的評論。代碼已相應更改。 – SubOptimal
[Java轉換Windows-1252到UTF-8,一些字母錯誤]的可能的重複(http://stackoverflow.com/questions/23082522/java-convert-windows-1252-to-utf-8-some -letters-are-wrong) – dezhik
你從哪裏得到這個字符串?它看起來不像是一個UTF問題。 –
我嘗試了http://stackoverflow.com/questions/23082522/java-convert-windows-1252-to-utf-8-some-letters-are-wrong,但對我無效。 – brunoroberto