在查看有关字符串编码转换的java API时,我感到很困惑。
我发现的API涉及将字符串转换为字节数组或将字节数组转换为字符串。但是,采用字节数组并返回String的API都不会同时采用输入和输出编码参数
鉴于我无法找到有关该问题的任何文档,我想假设在构造类似字符串的新字符串(缓冲区,编码)' - encoding参数表示输入编码,输出编码是常量,设置为UTF-16。
我认为这是对的吗?
答案 0 :(得分:0)
首先,如果不使用UTF-16
,请不要char
使用String
而byte[]
,以避免编码问题。
您可以创建特定的Charset
来读/写byte[]
:
Charset iso88591 = Charset.forName("ISO-8859-8");
Charset utf16 = Charset.forName("UTF-16");
只需使用ByteBuffer
解码:
byte[] inputData = //your byte array
ByteBuffer inputBuffer = ByteBuffer.wrap(inputData);
CharBuffer data = iso88591.decode(inputBuffer);
或编码:
ByteBuffer outputBuffer = utf16.encode(data);
byte[] outputData = outputBuffer.array();
EXTRA:如果你有一个编码文件,你可以简单地:
PrintWriter out = new PrintWriter(file, "ISO-8859-8");
答案 1 :(得分:0)
Java String
不知道编码问题,其内部表示是UTF-16,句号。
编码仅在将String
转换为byte
时很重要,反之亦然,例如当
String
byte[]
String
InputStreamReader
String
转换为byte[]
String
OutputStreamWriter
......并且可以在所有这些情况下指定。