java编程规范每行代码窄字符,关于C 程序的字符编码问题 - CSDN博客

正如前面提到的,C++有窄字符(char)和宽字符(wchar_t)的分别,分别有一

套相应的类和函数(string/cout/strlen与wstring/wcout/wcslen等)。前者在

不同的编译器下有不同的缺省编码(简体中文vc是GB18030,gcc是UTF-8),后

者一般都使用Unicode,其中vc下使用UTF-16,gcc缺省使用UTF-32。

C++在输出窄字符时会按程序内码原样输出,不会进行编码转换,因此在使用窄

字符时要求程序内码与运行环境编码一致,这样才不会出现乱码。由于简体中文

版vc的程序内码是GB18030,因此使用窄字符的vc程序只能运行在GB18030环境下

。同样,由于gcc缺省使用UTF-8作为程序内码,因此使用窄字符的gcc程序只能

运行在UTF-8的终端环境下。(这里说的都是在源代码中直接写中文等非ascii字

符的程序。用前面提到的gettext及其它工具,使用窄字符的程序也可以在不同

编码的运行环境中正确输出中文)

C++在输出宽字符时会自动转换为运行环境的编码,因此只要正确设置了运行环

境编码,同一个程序就可以在不同编码的运行环境中正确显示中文。这一点与

Java/.Net很象,Java/.Net的字符串类型都使用Unicode,在输入/输出时都需要

与当前运行环境的编码进行互转。

一般来说,如果需要支持多语言,有两种比较好的做法:

使用窄字符,但源程序中只使用ascii字符,非ascii字符通过gettext或其它

工具放到单独的文件中,由gettext等工具处理编码转换的问题。

在各种编码的运行环境中均能正确输出中文。

程序中不能直接出现非ascii字符,也不能通过\uXXXX方式指定非ascii字符

,后者也会被编译器转换为非ascii字符并存放在目标文件中。

注释中可以使用ascii兼容的编码,不影响编译器。

有比较多的现成代码可供重用。

使用宽字符。

在各种编码的运行环境中均能正确输出中文。

程序中可以使用非ascii字符。

需要配合前面的源程序文件编码设置,让编译器能正确识别源程序中的非

ascii字符。

由于以前使用宽字符的程序比较少,可供重用的代码较少。

Note如果程序中需要一些固定字符编码的字符串常量,例如固定是GB18030

编码的字符串常量,这些常量应该以\xXX的方式存放字符串常量经GB18030编码

后的内容,这样的内容才不会被转换为程序的内码,也不会转换为运行环境编码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值