3 回答
TA贡献1863条经验 获得超2个赞
通常,您无法执行此操作。UTF-8能够编码任何Unicode代码点。ISO-8859-1只能处理其中的一小部分。因此,从ISO-8859-1转换为UTF-8没问题。如果发现不支持的字符,则从UTF-8退回到ISO-8859-1将导致“替换字符”( )出现在文本中。
转码文字:
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 进行更多控制。例如,当发现无法编码的字符时,您可以引发异常,或者将其他字符用于替换文本。
TA贡献1808条经验 获得超4个赞
如果您有String,则可以执行以下操作:
String s = "test";
try {
s.getBytes("UTF-8");
} catch(UnsupportedEncodingException uee) {
uee.printStackTrace();
}
如果你有一个“破” String,你做错了什么,转换String到String另一种编码defenetely不是要走的路!您可以将a转换String为a byte[],反之亦然(给定编码)。在Java String中,AFAIK编码有,UTF-16但这是实现细节。
假设你有一个InputStream,你可以在阅读byte[],然后将其转换成一个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();
}
添加回答
举报