如何在Java中转换ISO-8859-1和UTF-8?
有谁知道如何将string从ISO-8859-1转换为UTF-8并返回到Java?
我从网上获取一个string并将其保存在RMS(J2ME)中,但我想保留特殊字符,并从RMS获取string,但使用ISO-8859-1编码。 我该怎么做呢?
一般来说,你不能这样做。 UTF-8能够编码任何Unicode代码点。 ISO-8859-1只能处理其中的一小部分。 所以,从ISO-8859-1到UTF-8的转码是没有问题的。 从UTF-8向后翻到ISO-8859-1会导致在find不支持的字符时在您的文本中出现“replace字符”( )。
转码文字:
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进行更多控制。 例如,可以在find不可编码的字符时引发exception,或者使用其他字符replace文本。
如果你有一个String
,你可以这样做:
String s = "test"; try { s.getBytes("UTF-8"); } catch(UnsupportedEncodingException uee) { uee.printStackTrace(); }
如果你有一个'破'的String
,你做错了什么,转换一个String
在另一个编码的String
是不可避免的不走的路! 您可以将String
转换为byte[]
,反之亦然(给定编码)。 在Java中, String
是用UTF-16
编码的AFAIK,但这是一个实现细节。
假设你有一个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(); }
哪些工作对我来说:( “ü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输出(我创build了一个方法来做到这一点):
public static String (String input){ String output = ""; try { /* From ISO-8859-1 to UTF-8 */ output = new String(input.getBytes("ISO-8859-1"), "UTF-8"); /* From UTF-8 to ISO-8859-1 */ output = new String(input.getBytes("UTF-8"), "ISO-8859-1"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return output; } // Example input = "Música"; output = "Música";
Apache Commons IO Charsets类可以派上用场:
String utf8String = new String(org.apache.commons.io.Charsets.ISO_8859_1.encode(latinString).array())