我在SO中發現了以下code。這真的有用嗎?UTF-8與ISO 8859-1之間的轉換:
String xml = new String("áéíóúñ");
byte[] latin1 = xml.getBytes("UTF-8");
byte[] utf8 = new String(latin1, "ISO-8859-1").getBytes("UTF-8");
我的意思是,latin1
是UTF-8編碼的在第二行,但讀ALS在第三ISO-8859-1編碼?這可以工作嗎?
不是我不想批評引用的代碼,我只是因爲碰到一些非常相似的遺留代碼而感到困惑,這似乎很奏效,我無法解釋原因。
編輯:我想在原來的post,第2行的「UTF-8」只是一個TYPO。但我不確定...
編輯2:在我最初發布後,有人編輯了上面的代碼並將第二行更改爲byte[] latin1 = xml.getBytes("ISO-8859-1");
。我不知道是誰做的,爲什麼他這麼做,但顯然這很糟糕。很抱歉,所有看到錯誤版本的代碼的人都是。我不知道是誰編輯的。上面的代碼現在是正確的。
你這樣做是錯的。不要解碼。不要getBYTES。只需使用'java -encoding UTF-8'或任何真正的編碼進行編譯。 Java具有可以容忍的Unicode支持,但默認值對您不利。 – tchrist 2012-02-17 15:38:17
你的直覺是正確的;第2行是一個錯字或錯誤。該代碼將UTF-16字符串轉碼爲UTF-8,然後將數據轉換爲ISO-8859-1並將其轉碼回UTF-16垃圾。然後,損壞的字符串被轉碼爲UTF-8,導致更多的垃圾。 – McDowell 2012-02-17 15:42:00