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

duanzhh 2010-07-22 02:19:29
大家好,最近做了个C++项目,客户端,从服务端接收到反馈消息后,里面涉及到中文乱码问题,因为不清楚服务端

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

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

给个解决办法,不胜感激!
...全文
870 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunyong 2010-07-24
  • 打赏
  • 举报
回复
5楼说的很对,必须知道源端的编码,否则没有办法转换。
yui 2010-07-23
  • 打赏
  • 举报
回复
libiconv?

try it first: iconv -t=<to_charset> -f=<from_charset> filename
Coder_Granger 2010-07-22
  • 打赏
  • 举报
回复
string = new String( string.getBytes("iso-8859-1"), "GB2312")

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

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


所以,你还是必须知道网络那边传过来的是什么编码,否则没法做转换.
duanzhh 2010-07-22
  • 打赏
  • 举报
回复
你可以这样理解,假如我现在有个中文字符串,我想把它转为UNICODE编码,这是可以的吧,而iso-8859-1这

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

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

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

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

但我不知道如何将字符串转换为iso-8859-1编码格式? 望大家给予一个解决办法
Coder_Granger 2010-07-22
  • 打赏
  • 举报
回复
单字节编码是无法保存中文字符的,单字节的表达能力是8bit,最多只能表示256个不同的字符.

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

如果不知道原来的编码是什么,编码转换就无从谈起.
duanzhh 2010-07-22
  • 打赏
  • 举报
回复
没明白我的意思,iso-8859-1 只是单字节字符集中最简单的一种,也就是“字节编号”与“UNICODE 字符编号”一致的那种编码规则,我想先把收到的字符串按字节进行编码,即编码成iso-8859-1格式,然后再进行二次编码,编码成GB2312.

Coder_Granger 2010-07-22
  • 打赏
  • 举报
回复
iso-8859-1无法表示中文字符,所以不可能把带中文字符的字符串转化为iso-8859-1编码.

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧