在我們的堆棧第三方庫被改寫(munging)包含字符串的表情符號等等,像這樣:如何逃生十進制文本轉換回爲Unicode在Java中
「奔\ 240 \ 159 \ 144 \ 144 \ 240 \ 159 \ 142 \ 169「
即十進制字節,而不是十六進制短路。
當然有一個現有的例程可以將它轉換回適當的Unicode字符串,但我發現的所有關於此的討論都需要格式\ u12AF,而不是\ 123。
在我們的堆棧第三方庫被改寫(munging)包含字符串的表情符號等等,像這樣:如何逃生十進制文本轉換回爲Unicode在Java中
「奔\ 240 \ 159 \ 144 \ 144 \ 240 \ 159 \ 142 \ 169「
即十進制字節,而不是十六進制短路。
當然有一個現有的例程可以將它轉換回適當的Unicode字符串,但我發現的所有關於此的討論都需要格式\ u12AF,而不是\ 123。
我不知道任何現有的套路,但一些簡單的像這樣應該做的工作(假設輸入可以作爲一個字符串):
public static String unEscapeDecimal(String s) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Writer writer = new OutputStreamWriter(baos, "utf-8");
int pos = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '\\') {
writer.flush();
baos.write(Integer.parseInt(s.substring(i+1, i+4)));
i += 3;
} else {
writer.write(c);
}
}
writer.flush();
return new String(baos.toByteArray(), "utf-8");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
筆者只是用來確保現有的字符在碼點> 127的字符串中編碼正確,如果它們發生未轉義。如果所有非ASCII字符都被轉義,則字節數組輸出流應該足夠了。
你確定這是unicode字符嗎? – CSK
字符串是否包含字節或實際轉義序列呈現爲字符?即是'\ 240 \ 159'兩個字節還是8個字節? –