将字符串从UTF-8转换为ISO-8859-1

时间:2017-11-17 16:49:35

标签: java

我正在从UTF-8字符集中的数据库中读取一些文本数据。但我需要使用ISO-8859-1字符集生成一个文件。

为此,我使用以下代码。

StringBuilder filaStr = new StringBuilder();
filaStr.append("INGENIERÍA DE EJECUCIÓN EN ADMINISTRACIÓN");//this is a UTF-8 string got from my database
Charset utf8 = Charset.forName("UTF-8");
Charset iso8859_1 = Charset.forName("ISO-8859-1");
CharsetDecoder decoder = utf8.newDecoder();
CharsetEncoder encoder = iso8859_1.newEncoder();
CharBuffer decodedCB = decoder.decode(ByteBuffer.wrap(filaStr.toString().getBytes()));
ByteBuffer encodedBB = encoder.encode(decodedCB);
pw.write(new String(encodedBB.array()));//pw is the PrintWriter that writes in the file
pw.write(new String(encodedBB.array(), iso8859_1));

当我使用文本编辑器使用UTF-8字符集打开文件时,我看到了这一点:

INGENIER�A DE EJECUCI�N EN ADMINISTRACI�N
INGENIERÍA DE EJECUCIÓN EN ADMINISTRACIÓN

当我使用ISO-8859-1打开它时,我看到了这一点:

INGENIER�A DE EJECUCI�N EN ADMINISTRACI�N
INGENIERÃA DE EJECUCIÃN EN ADMINISTRACIÃN

所需的结果是在INGENIERÍA DE EJECUCIÓN EN ADMINISTRACIÓN字符集中打印ISO-8859-1

1 个答案:

答案 0 :(得分:0)

问题是PrintWriter,必须使用所需的字符集进行初始化。

PrintWriter pw = new PrintWriter(file, "ISO-8859-1");解决了问题,甚至不需要CharsetDecoderCharsetEncoder