首页 > 其他分享 >解决WritePrivateProfileString写中文字符乱码问题

解决WritePrivateProfileString写中文字符乱码问题

时间:2023-11-30 11:05:30浏览次数:56  
标签:字符 中文 NULL 乱码 Unicode WritePrivateProfileString hFile

使用WritePrivateProfileString写ini文件,在中文操作系统下写中文,没有问题,在俄文操作系统下,中文乱码。由于工程是Unicode,因此实际调用的是WritePrivateProfileStringW,而非WritePrivateProfileStringA。但是查看ini文件,发现是ANSI编码。

查阅MSDN,发现有一句话:

If the file was created using Unicode characters, the function writes Unicode characters to the file. Otherwise, the function writes ANSI characters.

看了半天没太明白,因为调用WritePrivateProfileString时会自动创建文件,而传入文件的参数都是宽字符的,理论上应该是Unicode编码。请教了一下同事,他查了一会儿,发给我一个链接,里面提到先要手动创建文件,然后写BOM,之后再调用WritePrivateProfileString,就不会出现乱码。于是,在使用WritePrivateProfileString前加了一段这样的代码:

    WORD wBOM = 0xFEFF;
    DWORD NumberOfBytesWritten;
    DeleteFile(strConfigFilePath.c_str());
    HANDLE hFile = ::CreateFile(strConfigFilePath.c_str(), GENERIC_WRITE, 0,
        NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
    ::WriteFile(hFile, &wBOM, sizeof(WORD), &NumberOfBytesWritten, NULL);
    ::CloseHandle(hFile);

问题解决了。

参考:

【1】https://www.codeproject.com/Articles/9071/Using-Unicode-in-INI-files

 

标签:字符,中文,NULL,乱码,Unicode,WritePrivateProfileString,hFile
From: https://www.cnblogs.com/kuaixue/p/17866775.html

相关文章

  • 解决VS编译C++时,该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Uni
    使用VS编译C++时,报错: warningC4819:该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为Unicode格式以防止数据丢失。利用VS的高级保存选项,修改合适的编码规则即可解决,最新版VS需要手动添加高级保存选线的命令,方法如下:打开工具-->自定义 选择命令-->选择添......
  • 自学day8 js的字符串
    typora-copy-images-to:mediaES5和字符串一、ES5的语法js在产生的时候,年代比较早,当时的web需求比较少,所以刚开始的js功能比较少,语法没有特别严谨。随着时代的发展和web应用的普及,js需要更多的功能,以及更严谨的语法,所以,js会有版本的升级。第一版的js是ECMA一开始统一了标准以......
  • MySQL 连接字符串中加入 nullCatalogMeansCurrent = true 的含义
    nullCatalogMeansCurrent的含义:nullCatalogMeansCurrent=true#在指定的数据库中查找需要的表nullCatalogMeansCurrent=false#在服务器全部数据库中查找需要的表不同MySQL驱动nullCatalogMeansCurrent默认情况:从mysql-connector-java5.x版本起,nullCatal......
  • SQLSERVR 查询包含某个字符的存储/视图/表
    selectnamefromsysobjectso,syscommentsswhereo.id=s.idandtextlike'%是否生成SN%'ando.xtype='P'--查询特定的表(字段或者文字)在哪些存储过程中被使用SELECTDISTINCTOBJECT_NAME(id)--,textFROMsyscommentsWHEREidIN(SELECTidFROMsysobjectsWHEREt......
  • 2023-11-29:用go语言,给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现
    2023-11-29:用go语言,给你一个字符串s,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小。要求不能打乱其他字符的相对位置)。输入:s="cbacdcbc"。输出:"acdb"。来自左程云。答案2023-11-29:所有的代码用灵捷3.5编写,感觉有点抽风了,生成的代码需要修改......
  • 实型(浮点型) 字符型 枚举型 - C语言-2023/11/29
    实型(浮点型)字符型枚举型......
  • url特殊字符传递参数解决方法(特指超链接)
    需要进行转码:十六进制值1.+URL中+号表示空格%2B2.空格URL中的空格可以用+号或者编码%203./分隔目录和子目录%2F4.?分隔实际的URL和参数%3F5.%指定特殊字符%256.#表示书签%237.&URL中指定的参数间的分隔符%268.=URL中指定参数的值%3D//带有特殊字符的......
  • js 拼接字符串带变量(js方法参数单双引号拼接的问题记录)
    小结:外面单引号,里面双引号,然后方法参数给转义的单引号即可(看下面的onClick事件即可)//刷新二级信号表格(增删改操作后)functionreloadSignal(subId){//清空$("#msgAll"+subId).empty();//js手工添加表格varhtmlStart='<spanstyle="position:......
  • open3d保存的ply文件乱码
    出现的问题1)我的代码如下importcv2importopen3daso3dimportnumpyasnpimportmatplotlib.pyplotaspltfromplyfileimportPlyData,PlyElementif__name__=='__main__':depth=o3d.t.io.read_image('D:/biaoding/lion/depth_5.png')#print(......
  • 字符串类型
    【二】字符串类型【0】作用字符串类型用于表示文本信息,是一种非常重要的数据类型,用于处理文字、字符等信息【1】定义方式字符串可以使用单引号、双引号或三引号进行定义#定义方式1:name_1='fyc'#(当左边有赋值符号和遍历名的时候,它就是字符串)#定义方式2:name_......