采用的是什么字符编码,我想把收到的字符串先转换为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编码格式? 望大家给予一个解决办法
种编码只是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
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编码格式? 望大家给予一个解决办法
种编码只是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
try it first: iconv -t=<to_charset> -f=<from_charset> filename
#7
5楼说的很对,必须知道源端的编码,否则没有办法转换。