C++ linux中文乱码

装好Ubuntu Kylin后,将windows代码拷贝到ubuntu下,发现如下问题

l  中文注释无法正常显示。

l  运行过程中,中文字符串比较失败。

百思不得骑姐。在查阅一番资料,多次测试后,确定这都是字符集的问题。

1.    中文注视无法正常显示

windows的默认编码方式是Ansi,而Ubuntu Kylin字符集默认是utf-8。字符集的不同直接导致ubuntu无法正常显示从widnows拷贝过来的中文。 有两种解决方式

Ø  将代码文件的编码方式转成utf-8,建议带上bom。很多工具都可以转换,比如记事本,EditPlus。

Ø  由于ANSI中文使用的是GB2312编码,让ubuntu支持GB2312。就可以正常显示中文。具体方法如下

1)    修改/var/lib/locales/supported.d/local文件,在文件中添加

zh_CN.GBK GBK

zh_CN.GB2312 GB2312

2)    sudo dpkg-reconfigure --forcelocales

然后在输出的结果中会出现

zh_CN.GB2312 done

zh_CN.GBK done

出现done就成功了

3)    用户的配置文件.profile中添加

export LANG=zh_CN.gbk

2.    中文字符串比较失败

有时候代码中需要与配置文件内的中文进行比较。当代码文件与配置文件的中文编码方式不一致时,就会出现比对失败。相同的中文进行对比居然不一样,这是编码方式在捣鬼。保证编码方式一致即可。

建议: 如果项目要跨平台,建议大家将代码文件的编码方式统一成UTF-8带bom。这样widnows和linux都可以识别。程序也就不会有那么多莫名其妙的问题。

备注:

       Unicode:万国码,包含所有目前所有的文字及符号。他的编码方案包括UTF-8, UTF-16, UTF-32。一般unicode默认是utf-16。

       UTF-8:多字节编码,用1-4个字节来描述字符

       UTF-16:双字节编码,可能为2个字节或4个字节。

       UTF-32:四字节编码, 用4个字节来表示字符。

       ASCII:美国信息交换标准, 用于表示英文相关, 1个字节

       ANSI:美国国家标准协会,第一个字节同ASCII,后面由各个国家自己补充。需要注意的是不同国家的ANSI不兼容。中文采用GB2312编码。

       GB2312:中文编码方式,包含6763个汉字,以及其他一些符号。

       GBK:GB2312的超集。 包含了古汉字、繁体等其他一些内容。

       Bom头:用于标识文件编码方式,非必须

       详细一些信息大家可以参考雪儿浅浅的博客,总结的很好       http://blog.sina.com.cn/s/blog_4aa887440101arks.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: zip.h 是一个用于解压缩.zip 文件的库。如果在使用 zip.h 进行解压缩时出现中文乱码的问题,可能是因为 zip 文件本身的编码方式不是 UTF-8,而在解压缩时又没有指定正确的编码方式。 要解决这个问题,可以尝试以下几种方法: 1. 指定编码方式:在使用 zip.h 进行解压缩时,可以指定正确的编码方式。例如,如果原文件的编码方式为 GBK,则可以使用以下代码进行解压缩: ``` zip_set_default_password_utf8(ZIP_DEFAULT_PASSWORD, "GBK"); ``` 2. 转换编码:如果原文件的编码方式不是 UTF-8,可以使用转换函数将其转换为 UTF-8。例如,在 C++ 中,可以使用 wstring_convert 类将 GBK 编码的字符串转换为 UTF-8: ``` #include <codecvt> #include <string> std::wstring_convert<std::codecvt_utf8<wchar_t>> converter; std::wstring str = converter.from_bytes(gbk_str); ``` 3. 修改代码页:在 Windows 操作系统中,可以使用 chcp 命令修改默认代码页,以解决控制台中显示中文乱码的问题。例如,如果原文件的编码方式为 GBK,可以使用以下命令将代码页修改为 GBK: ``` chcp 936 ``` 总之,在使用 zip.h 进行解压缩时,需要注意原文件的编码方式,并且在代码中进行正确的设置和转换,以确保中文不出现乱码。 ### 回答2: zip.h 是一个开源的压缩文件库,常用于 C++ 编程中。解压中文文件时可能会出现乱码的现象,这通常是因为编码方式不一致导致的。 在使用 zip.h 进行解压时,需要注意以下几个方面: 1. 文件编码方式:zip.h 默认使用的是 ASCII 编码方式,而中文文件通常采用 UTF-8 或者 GBK 编码方式。如果解压出现乱码,可以尝试将编码方式修改为 UTF-8 或 GBK。 2. 操作系统编码方式:不同的操作系统所采用的编码方式也不一样。例如 Windows 系统采用 GBK 编码,而 Linux 系统通常采用 UTF-8 编码。如果在解压时涉及多个操作系统,也需要考虑编码方式的问题。 3. 解压参数设置:zip.h 提供了一些参数设置,可以进行解压缩等操作。如果不正确地设置参数,也会导致解压乱码的问题。 综上所述,要解决 zip.h 解压中文乱码问题,需要在操作中充分考虑文件编码方式、操作系统编码方式以及解压参数设置等方面,以确保解压后的文件能够正常显示。同时,也可以尝试使用一些其他的压缩文件库,如 zlib,以获得更好的解压效果。 ### 回答3: c 语言中的 zip.h 头文件提供了压缩和解压缩 zip 文件的功能。但是,在解压缩 zip 文件时,如果文件名和内容中包含中文字符,很可能会出现乱码的问题。 这是因为 zip 格式本身只支持 ASCII 字符编码,对于非 ASCII 字符编码,由于没有统一的编码标准,会导致在不同的操作系统和软件中出现不同的解码方式,从而导致乱码问题。 为了解决这个问题,可以考虑以下两种方法: 1. 修改 zip 解压函数,增加对于非 ASCII 字符编码的解码支持,将文件名和内容中的非 ASCII 字符编码解码成 UNICODE 或 UTF-8 编码,从而避免乱码问题。 2. 在 zip 压缩文件时,使用 ASCII 编码的文件名和内容,避免出现乱码问题。可以将文件名和内容转换成 ASCII 编码或者使用 URL 编码方式进行转换,保证文件名和内容只包含 ASCII 字符编码。 综上所述, zip.h 解压中文乱码问题可以通过修改解压函数或者在压缩文件时使用 ASCII 编码来解决。但需要注意的是,不同的操作系统和软件对于 ASCII 编码的支持也有差异,因此在具体的使用中需要进行充分的测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值