linux C语言:如何在ISO8859-1和GB2312字符编码之间互相转换

如题,谢谢!
2024-12-26 04:35:13
推荐回答(4个)
回答1:

  JAVA有一个public String(byte bytes[], Charset charset)函数可以用指定字节数组和编码来构造字符串。一个public byte[] getBytes(Charset charset)函数把字符串按指定编码来得到字节数组。可以用这两个函数来实现编码转换。
  下面是一个简单的例子,注意一下例子中的文字本身的编码,最好在自己的环境中用gb2312重新输入,不然可能是乱码。当然转换后输出肯定有一个是乱码,也肯能都是乱码。根据你的编辑器的编码格式有关。public class EncodingTest
{
public static void main(String[] args)
{
try
{
String gb = new String("国标2312".getBytes(),"gb2312");
System.out.println(gb);
byte [] b = gb.getBytes("gb2312");
String ios = new String(b,"ISO-8859-1");
System.out.println(ios);
} catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
}

回答2:

不用转换.GB2312就用ISO8859-1

GB2312 联读两个 bytes
从文件始或行的开始起读.

loop:
读 byte1;
如果 byte1 > 0xA0 则 读 byte2
byte1byte2 构成一个GB2312-1980码,
如果 未到 EOF then goto loop;

如果 byte1 <= 0xA0 , 它是 ASCII 或别的码, 不读byte2
如果 未到 EOF, goto loop;

回答3:

libiconv 、libidn 印象里有这两个主要的转换库。

不过似乎 iso8859-1 没办法完全互转 GB2312 吧?iso8859 系列是 8 位编码。GB2312 是 16 位编码。

其实 Linux 里面应该所有的处理过程都试用 UTF-8 。只有输入输出时才进行编码转换。

回答4:

我只知道 enca命令可以直接转换字符编码。C应当能直接调用系统命令吧