Lazarus Wiki州
Lazarus(实际上是它的LazUtils包)利用了这个API 并将其更改为UTF-8(CP_UTF8)。这也意味着Windows用户现在也在使用 RTL中的UTF-8字符串
在我们的跨平台和交叉编译器代码中,我们想要检测这种特定情况。 GetACP()Windows API函数仍然返回“1252”,Lazarus中的GetDefaultTextEncoding()函数也是如此。但是文本(具体来说,FindFirst()函数返回的文件名)包含UTF8编码文件名的字符串,字符串(变量)的代码页也是65001。
那么,我们如何确定RTL默认使用UTF8字符串?我花了几个小时试图从Lazarus源代码中解决这个问题,但可能我错过了一些东西......
据我所知,在很多情况下,我们需要检查每个特定字符串的代码页,但我感兴趣的是找到默认的RTL代码页,它是Lazarus中的UTF8,但在FPC / Windows中是Windows定义的代码页没有拉撒路。
答案 0 :(得分:0)
事实证明,没有单一的代码页变量或功能。文件系统API调用的结果将转换为在DefaultRTLFileSystemCodePage变量中定义的代码页。唯一的问题是这个变量存在于源代码中并且应该在系统单元中,但是编译器没有看到它。