有谁知道如何将字符串从ISO-8859-1转换为UTF-8并返回Java?
我从网上获取一个字符串并将其保存在RMS(J2ME)中,但我想保留特殊字符并从RMS获取字符串,但使用ISO-8859-1编码.我该怎么做呢?
一般来说,你不能这样做.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");
您可以使用较低级别的Charset
API 进行更多控制.例如,您可以在找到无法编码的字符时引发异常,或者对替换文本使用不同的字符.
哪个对我 有用:("üzümbağları"是用土耳其语写的正确的)
将ISO-8859-1转换为UTF-8:
String encodedWithISO88591 = "üzüm baÄları"; String decodedToUTF8 = new String(encodedWithISO88591.getBytes("ISO-8859-1"), "UTF-8"); //Result, decodedToUTF8 --> "üzüm ba?lar?"
将UTF-8转换为ISO-8859-1
String encodedWithUTF8 = "üzüm ba?lar?"; String decodedToISO88591 = new String(encodedWithUTF8.getBytes("UTF-8"), "ISO-8859-1"); //Result, decodedToISO88591 --> "üzüm baÄları"
如果你有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是用AFAIK编码的,UTF-16
但这是一个实现细节.
假设你有一个InputStream
,你可以在a中读取byte[]
然后将其转换为String
使用
byte[] bs = ...; String s; try { s = new String(bs, encoding); } catch(UnsupportedEncodingException uee) { uee.printStackTrace(); }
甚至更好(感谢erickson)使用InputStreamReader
:
InputStreamReader isr; try { isr = new InputStreamReader(inputStream, encoding); } catch(UnsupportedEncodingException uee) { uee.printStackTrace(); }