我们正在使用内部使用简单Win-Api调用WritePrivateProfileString
的工具。
我知道定义标志UNICODE可以映射到WritePrivateProfileString**A**
或WritePrivateProfileString**W**
我正在向INI文件写入内容,该文件以前不存在。
在某些系统上,它的行为也有所不同。为什么?
例如:在ASCI中为A7(十六进制)的字符“§”有时被编写为Unicode格式C2 A7(十六进制)。
但仅在某些系统上,我不知道为什么?!编写ANSI或UNICODE的系统条件是什么?
我尝试先创建文件,然后再写入文件,甚至尝试通过已经添加一些字符来定义格式,因为我认为WritePrivateProfileString
在内部使用isTextUnicode
,
但这里没有机会。
是否有人以正确的方式理解此API文档:
https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-writeprivateprofilestringa
我在这里不能完全同意本文档。我知道我在某种程度上一定是错的;-)还是正确的做法?
我们想要做的就是在任何情况下将ANSI写入INI文件。 (我无法将其更改为WritePrivateProfileString**A**
方法,因为我们使用的是内部仅使用WritePrivateProfileString
函数的工具。)不管怎样,它可以在90%的PC上正常工作,但是在某些情况下,我们仍然使用unicode字母INI文件。
我也知道ASCI不是最新技术,但是我们正在对该INI值执行一些CRC计算,而“A7”不是“C2 A7”,这会导致计算错误,这就是为什么我们要需要纯ASCII格式。
感谢您的任何帮助。
最佳答案
我找到了根本原因:
https://en.wikipedia.org/wiki/Unicode_in_Microsoft_Windows
在某些系统上激活了此设置,它负责将我期望的ANSI代码更改为INI文件中的UNICODE。
是的,我知道我们将来必须朝UNICODE方向发展。但是现在,Microsoft也在将我们推向这个方向,这还不错,但是我以前并不了解这种设置或策略。
@IInspectable:是的,您是对的0xA7不是ASCII,而是ANSI(或ASCII-8,扩展ASCII),我把它弄混了,谢谢。
关于c++ - WritePrivateProfileString-不可预测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63959305/