转换在iso-8859-8中编码的java字符串

时间:2016-06-28 11:32:41

标签: java encoding

在查看有关字符串编码转换的java API时,我感到很困惑。

我发现的API涉及将字符串转换为字节数组或将字节数组转换为字符串。但是,采用字节数组并返回String的API都不会同时采用输入和输出编码参数

鉴于我无法找到有关该问题的任何文档,我想假设在构造类似字符串的新字符串(缓冲区,编码)' - encoding参数表示输入编码,输出编码是常量,设置为UTF-16。

我认为这是对的吗?

2 个答案:

答案 0 :(得分:0)

首先,如果不使用UTF-16,请不要char使用Stringbyte[],以避免编码问题。

您可以创建特定的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

......并且可以在所有这些情况下指定。