C++ 读取汉字乱码

Lee_2019 2017-12-06 03:03:38
用ifstream 读取数据时,遇见汉字不能正常显示,乱码,一个汉字占两个字符,但是这种情况怎么解决,遇到汉字的代码如何写
...全文
347 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
赵4老师 2017-12-07
void HexDump(char *buf,int len,int addr) {
    int i,j,k;
    char binstr[80];

    for (i=0;i<len;i++) {
        if (0==(i%16)) {
            sprintf(binstr,"%08x -",i+addr);
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        } else if (15==(i%16)) {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            sprintf(binstr,"%s  ",binstr);
            for (j=i-15;j<=i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            printf("%s\n",binstr);
        } else {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        }
    }
    if (0!=(i%16)) {
        k=16-(i%16);
        for (j=0;j<k;j++) {
            sprintf(binstr,"%s   ",binstr);
        }
        sprintf(binstr,"%s  ",binstr);
        k=16-k;
        for (j=i-k;j<i;j++) {
            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
        }
        printf("%s\n",binstr);
    }
}
  • 打赏
  • 举报
回复
赵4老师 2017-12-07
对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
  • 打赏
  • 举报
回复
Uncle_higo 2017-12-07
主要是了解数据源的编码方式,每种编码方式对应的汉字是不同的,例如数据源的编码是方式1,可能0xAABB 代表 一个汉字,编码方式2 里0xAABB可能就是另一个汉字
  • 打赏
  • 举报
回复
LXL110306 2017-12-06
根据实际情况转码就可以了~
  • 打赏
  • 举报
回复
大尾巴猫 2017-12-06
同一个汉字,编码方式不同,读到的实际内容是不一样的。 windows控制台一般是gbk编码,如果你读取的文本文件是Unicode或者Utf-8编码的汉字,当然是乱码。
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.1w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
申请成为版主
帖子事件
创建了帖子
2017-12-06 03:03
社区公告
暂无公告