Linux下C++字符串如何转换为iso-8859-1编码格式?急!急!

时间:2022-04-01 23:52:41
   大家好,最近做了个C++项目,客户端,从服务端接收到反馈消息后,里面涉及到中文乱码问题,因为不清楚服务端

采用的是什么字符编码,我想把收到的字符串先转换为iso-8859-1编码形式,这样无论对端发送的是什么编码格式,

都可以先转换为iso-8859-1,然后再转换为GB2312编码,但不清楚如何才能将C++字符串转换为iso-8859-1格式,麻烦

给个解决办法,不胜感激!

7 个解决方案

#1


iso-8859-1无法表示中文字符,所以不可能把带中文字符的字符串转化为iso-8859-1编码.

#2


没明白我的意思,iso-8859-1 只是单字节字符集中最简单的一种,也就是“字节编号”与“UNICODE 字符编号”一致的那种编码规则,我想先把收到的字符串按字节进行编码,即编码成iso-8859-1格式,然后再进行二次编码,编码成GB2312.

#3


单字节编码是无法保存中文字符的,单字节的表达能力是8bit,最多只能表示256个不同的字符.

不管把字符串转换成什么编码,前提是你知道它原来的编码是什么,并且转换后的编码能表示原来的值.

如果不知道原来的编码是什么,编码转换就无从谈起.

#4


你可以这样理解,假如我现在有个中文字符串,我想把它转为UNICODE编码,这是可以的吧,而iso-8859-1这

种编码只是UNICODE按字节转换的一种编码,当把字符串按字节转换为iso-8859-1格式后,实际也就是

UNICODE格式编码,这样就可以进行GB2312有目的的转换了。

我知道JAVA中是这样转换的string = new String( string.getBytes("iso-8859-1"), "GB2312") ,

但不清楚C++应该如何实现

但我不知道如何将字符串转换为iso-8859-1编码格式?  望大家给予一个解决办法

#5


string = new String( string.getBytes("iso-8859-1"), "GB2312")

这样做的前提是,string本身的值就是gbk编码字符串编码成的字节序列.
也就是说,网络那边把gbk编码的字符串转成了二进制字节序列传送了过来.

如果网络那边传递过来的数据是utf8编码的,就不能这么写了,
要写成
string = new String( string.getBytes("iso-8859-1"), "UTF-8")


所以,你还是必须知道网络那边传过来的是什么编码,否则没法做转换.

#6


libiconv?

try it first: iconv -t=<to_charset> -f=<from_charset> filename

#7


5楼说的很对,必须知道源端的编码,否则没有办法转换。

#1


iso-8859-1无法表示中文字符,所以不可能把带中文字符的字符串转化为iso-8859-1编码.

#2


没明白我的意思,iso-8859-1 只是单字节字符集中最简单的一种,也就是“字节编号”与“UNICODE 字符编号”一致的那种编码规则,我想先把收到的字符串按字节进行编码,即编码成iso-8859-1格式,然后再进行二次编码,编码成GB2312.

#3


单字节编码是无法保存中文字符的,单字节的表达能力是8bit,最多只能表示256个不同的字符.

不管把字符串转换成什么编码,前提是你知道它原来的编码是什么,并且转换后的编码能表示原来的值.

如果不知道原来的编码是什么,编码转换就无从谈起.

#4


你可以这样理解,假如我现在有个中文字符串,我想把它转为UNICODE编码,这是可以的吧,而iso-8859-1这

种编码只是UNICODE按字节转换的一种编码,当把字符串按字节转换为iso-8859-1格式后,实际也就是

UNICODE格式编码,这样就可以进行GB2312有目的的转换了。

我知道JAVA中是这样转换的string = new String( string.getBytes("iso-8859-1"), "GB2312") ,

但不清楚C++应该如何实现

但我不知道如何将字符串转换为iso-8859-1编码格式?  望大家给予一个解决办法

#5


string = new String( string.getBytes("iso-8859-1"), "GB2312")

这样做的前提是,string本身的值就是gbk编码字符串编码成的字节序列.
也就是说,网络那边把gbk编码的字符串转成了二进制字节序列传送了过来.

如果网络那边传递过来的数据是utf8编码的,就不能这么写了,
要写成
string = new String( string.getBytes("iso-8859-1"), "UTF-8")


所以,你还是必须知道网络那边传过来的是什么编码,否则没法做转换.

#6


libiconv?

try it first: iconv -t=<to_charset> -f=<from_charset> filename

#7


5楼说的很对,必须知道源端的编码,否则没有办法转换。