c++ 以UTF-16LE编码方式保存文件

本文介绍了如何使用C++以UTF-16LE编码保存文件,涉及BOM标识、fopen_s和fwprintf函数的使用,以及避免乱码的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 前言

正常情况下,c++保存文件的编码方式一般为ANSI。但为了满足一些需求,会要求保存文件的编码方式为UTF-16LE、UTF-8或Unicode。

了解相关知识发现,决定文件编码方式主要是在于文件的BOM(Byte Order Mark)。

  • 0xFE 0xFF => UTF-16 大端序

  • 0xFF 0xFE => UTF-16 小端序

  • 0x00 0x00 0xFE 0xFF => UTF-32 大端序

  • 0xFF 0xFE 0x00 0x00 => UTF-32 小端序

  • 0xEF 0xBB 0xBF => UTF-8 

PS:编码是个复杂的问题,这里不深入解析,另开一个文章进行解析。

PPS:乱码是对于人来说的,对于机器而言,没有乱码这个概念, 之所以会出现乱码,是因为解码过程出现错误,和编码不能一一对应。

2. 实现

step1:用fopen_s函数新建一个指定编码方式的文件

fopen_s函数原型:

errno_t fopen_s( 
   FILE** pFile,
   const char *filename,
   const char *mode 
);
errno_t _wfopen_s(
   FILE** pFile,
   const wchar_t *filename,
   const wchar_t *mode 
);

其中,mode的可选参数有:

"rw, ccs=UTF-16LE" 或"rw, ccs=UTF-8”或"rw, ccs=Unicode” ;

当以这种mode方式新建了文件,那么该文件就会以指定的编码方式创建文件。

 step2:用fwprintf函数往文件里面写东西

【这里用fwprintf函数往里面写东西才不会出现乱码,是因为当你指定了编码方式为UTF-16时,说明这就是个多字节的编码,如果没有w,那么就会出现这个情况:编码时候是单字节,解码时候是多字节,从而出现乱码状况】

fwprintf函数原型:

int fwprintf( 
   FILE* stream, 
   const wchar_t* format [, argument ]...
);

step3:最后用 fclose函数将文件保存关闭。

fclose函数原型:
int fclose( 
   FILE* stream 
);

PS:有同学需要完整例子,这里我将当时我更改的tinyXml文件放上来,当做例子哈~

见链接https://download.youkuaiyun.com/download/Quellaaa/12393704

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值