mingw指定字符编码格式

-finput-charset:用于指定输入文件(源文件)的字符编码格式(字符集),当未指定输入文件(源文件)的字符编码格式(字符集)(-finput-charset)时,gcc按照UTF-8字符编码格式(字符集)解析输入文件(源文件).

当未指定输入文件(源文件)的字符编码格式(字符集)(-finput-charset)时,gcc按照UTF-8字符编码格式(字符集)解析输入文件(源文件).对于输入文件(源文件)中的有宽字符标量L的字符L''常量和字符串L""常量,编译器会先从输入文件(源文件)中读取该有宽字符标量L的字符L''常量和字符串L""常量的二进制数据,注意读取的该有宽字符标量L的字符L''常量和字符串L""常量的二进制数据的字符编码格式(字符集)是输入文件(源文件)的字符编码格式(字符集),然后按照UTF-8字符编码格式(字符集)看待并转换成UNICODE字符编码格式(字符集)的二进制数据,最后保存到生成的文件中.此时必需保证输入文件(源文件)的字符编码格式(字符集)是UTF-8才能成功转换成Unicode字符编码格式(字符集).因为如果输入文件(源文件)的字符编码格式(字符集)是UTF-8的时候,输入文件(源文件)中的有宽字符标量L的字符L''常量和字符串L""常量的字符编码格式(字符集)也是UTF-8,因此可以成功转换成Unicode字符编码格式(字符集),如果输入文件(源文件)的字符编码格式(字符集)不是UTF-8的时候,此时输入文件(源文件)中的有宽字符标量L的字符L''常量和字符串L""常量的字符编码格式(字符集)是非UTF-8的输入文件(源文件)的字符编码格式(字符集),此时必需指定输入文件(源文件)的字符编码格式(字符集)(-finput-charset=输入文件(源文件)的字符编码格式(字符集))才能成功转换成Unicode字符编码格式(字符集).



指定多字节字符串(const char*)常量在编译后的程序里保存的编码集.
-fexec-charset:用于指定输入文件(源文件)中的传统字符''常量和传统字符串""常量在编译后的程序里保存的字符编码格式(字符集).

当未指定传统字符''常量和传统字符串""常量在编译后的程序里保存的字符编码格式(字符集)(-fexec-charset)且未指定输入文件(源文件)的字符编码格式(字符集)(-finput-charset)时,gcc按照UTF-8字符编码格式(字符集)解析输入文件(源文件).编译器对输入文件(源文件)中的传统字符''常量和传统字符串""常量,不做任何处理,而是直接从输入文件(源文件)中读取该传统字符''常量和该传统字符串""常量的二进制数据并保存到生成的文件中.这样保存到生成的文件中的该传统字符''常量和该传统字符串""常量的二进制数据的字符编码格式(字符集)是输入文件(源文件)的字符编码格式(字符集).即当未指定传统字符''常量和传统字符串""常量在编译后的程序里保存的字符编码格式(字符集)(-fexec-charset)且未指定输入文件(源文件)的字符编码格式(字符集)(-finput-charset)时,如果输入文件(源文件)的字符编码格式(字符集)是ANSI中的GBK,那么保存到生成的文件中的该传统字符''常量和该传统字符串""常量的字符编码格式(字符集)是输入文件(源文件)的字符编码格式(字符集).如果源文件是gbk编码,则可执行文件中的是gbk编码,如果源文件是utf-8,则可执行文件中的是utf-8编码,以此类推.

当未指定传统字符''常量和传统字符串""常量在编译后的程序里保存的字符编码格式(字符集)(-fexec-charset)但指定输入文件(源文件)的字符编码格式(字符集)(-finput-charset)时,gcc按照指定输入文件(源文件)的字符编码格式(字符集)(-finput-charset)指定的字符编码格式(字符集)解析输入文件(源文件).对于输入文件(源文件)中的传统字符''常量和传统字符串""常量,编译器会先从输入文件(源文件)中读取该传统字符''常量和该传统字符串""常量的二进制数据,当做指定输入文件(源文件)的字符编码格式(字符集)(-finput-charset)指定的字符编码格式看待,然后转换成utf-8字符编码格式的数据,然后保存到生成的文件中.

如果想把输入文件(源文件)中的传统字符''常量和传统字符串""常量按指定的字符编码格式(字符集)保存到生成的文件时需要指定-fexec-charset,即指定-fexec-charset,此时如果未指定输入文件(源文件)的字符编码格式(字符集)(-finput-charset)时,gcc按照UTF-8字符编码格式(字符集)解析输入文件(源文件).对于输入文件(源文件)中的传统字符''常量和传统字符串""常量,编译器会先从输入文件(源文件)中读取该传统字符''常量和该传统字符串""常量的二进制数据,注意读取的该传统字符''常量和该传统字符串""常量的二进制数据的字符编码格式(字符集)是输入文件(源文件)的字符编码格式(字符集),然后按照UTF-8字符编码格式(字符集)看待并转换成-fexec-charset指定的传统字符''常量和传统字符串""常量字符编码格式(字符集)的二进制数据,最后保存到生成的文件中.此时必需保证输入文件(源文件)的字符编码格式(字符集)是UTF-8才能成功转换成-fexec-charset指定的传统字符''常量和传统字符串""常量字符编码格式(字符集).因为如果输入文件(源文件)的字符编码格式(字符集)是UTF-8的时候,输入文件(源文件)中的传统字符常量''和传统字符串常量""的字符编码格式(字符集)也是UTF-8,因此可以成功转换成-fexec-charset指定的传统字符''常量和传统字符串""常量字符编码格式(字符集),如果输入文件(源文件)的字符编码格式(字符集)不是UTF-8的时候,此时输入文件(源文件)中的传统字符''常量和传统字符串""常量的字符编码格式(字符集)是非UTF-8的输入文件(源文件)字符编码格式(字符集)的,此时必需指定输入文件(源文件)的字符编码格式(字符集)(-finput-charset=输入文件(源文件)的字符编码格式(字符集))才能成功转换成-fexec-charset指定的传统字符''常量和传统字符串""常量字符编码格式(字符集).


指定宽字节字符串(const wchar_t*)常量在编译后的程序里的保存的编码集.
-fwide-exec-charset:指定输入文件(源文件)中的有宽字符标量L的字符L''常量和字符串L""常量在编译后的程序里保存的字符编码格式(字符集).
如果不指定,默认的就是UTF-16或者UTF-32,取决于你的系统中使用的宽字符格式。(正如上面说的,windows使用UTF-16的UNICODE编码,它是UCS-2字符集的一个编码格式;linux使用UTF-32的UNICODE编码,它是UCS-4字符集的一个编码格式。相应的,windows中的编译器一般将wchar_t定为2字节宽,而linux中的编译器一般将wchar_t定义为4字节宽。)

在C/C++中,多字节字符的类型是char,宽字符的类型是wchar_t.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漫漫人生路_SUI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值