3 回答

TA貢獻1863條經(jīng)驗 獲得超2個贊
通常,您無法執(zhí)行此操作。UTF-8能夠編碼任何Unicode代碼點。ISO-8859-1只能處理其中的一小部分。因此,從ISO-8859-1轉(zhuǎn)換為UTF-8沒問題。如果發(fā)現(xiàn)不支持的字符,則從UTF-8退回到ISO-8859-1將導(dǎo)致“替換字符”( )出現(xiàn)在文本中。
轉(zhuǎn)碼文字:
byte[] latin1 = ...
byte[] utf8 = new String(latin1, "ISO-8859-1").getBytes("UTF-8");
要么
byte[] utf8 = ...
byte[] latin1 = new String(utf8, "UTF-8").getBytes("ISO-8859-1");
您可以使用較低級別的CharsetAPI 進行更多控制。例如,當(dāng)發(fā)現(xiàn)無法編碼的字符時,您可以引發(fā)異常,或者將其他字符用于替換文本。

TA貢獻1808條經(jīng)驗 獲得超4個贊
如果您有String,則可以執(zhí)行以下操作:
String s = "test";
try {
s.getBytes("UTF-8");
} catch(UnsupportedEncodingException uee) {
uee.printStackTrace();
}
如果你有一個“破” String,你做錯了什么,轉(zhuǎn)換String到String另一種編碼defenetely不是要走的路!您可以將a轉(zhuǎn)換String為a byte[],反之亦然(給定編碼)。在Java String中,AFAIK編碼有,UTF-16但這是實現(xiàn)細節(jié)。
假設(shè)你有一個InputStream,你可以在閱讀byte[],然后將其轉(zhuǎn)換成一個String使用
byte[] bs = ...;
String s;
try {
s = new String(bs, encoding);
} catch(UnsupportedEncodingException uee) {
uee.printStackTrace();
}
甚至更好(由于埃里克森)使用InputStreamReader如下:
InputStreamReader isr;
try {
isr = new InputStreamReader(inputStream, encoding);
} catch(UnsupportedEncodingException uee) {
uee.printStackTrace();
}
添加回答
舉報