有人知道如何将字符串从ISO-8859-1转换为UTF-8,然后再转换回Java吗?
我从web上获取一个字符串,并将其保存在均方根(J2ME)中,但我希望保留特殊字符,并使用ISO-8859-1编码从均方根中获取字符串。我该怎么做呢?
发布于 2009-03-16 22:21:00
一般来说,您不能这样做。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进行更多控制。例如,可以在发现不可编码的字符时引发异常,或者使用不同的字符替换文本。
发布于 2009-03-16 21:30:47
如果你有一个String
,你可以这样做:
String s = "test";
try {
s.getBytes("UTF-8");
} catch(UnsupportedEncodingException uee) {
uee.printStackTrace();
}
如果你有一个“坏掉的”String
,你做错了什么,将String
转换成另一种编码的String
显然不是正确的做法!您可以将String
转换为byte[]
,反之亦然(给定编码)。在Java中,String
是用UTF-16
编码的,但这只是一个实现细节。
假设您有一个InputStream
,您可以读取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();
}
发布于 2016-06-14 01:24:57
下面是一种简单的字符串输出方法(我创建了一个方法来完成此操作):
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";
https://stackoverflow.com/questions/652161
复制相似问题