gpt4 book ai didi

c++ - SetThreadLocale 和 UTF8

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:49:31 27 4
gpt4 key购买 nike

所以我想使用 SetThreadLocale 将线程代码页设置为 UTF8。到目前为止,我一直在使用 atl 字符串转换宏的第二个参数,如“CT2A(szBUF, CP_UTF8)”来执行此操作。但我希望能够在开始时使用 SetThreadLocale() 设置一次线程代码页,而不必再次使用转换宏的第二个参数。

我该怎么做? SetThreadLocale 不会采用像 CP_UTF8 这样的代码页参数,它只是一个 LCID。我应该向 SetThreadLocale 提供哪些参数才能实现此目的?

请记住,我的脑海里没有特定的语言。我得到的字符串可能是日语、韩语、英语等。到目前为止,在将 CP_UTF8 指定为转换宏的第二个参数时,我对这种字符串组合没有任何问题。您可能会问“那么为什么不继续使用第二个参数”。回答,“因为编写代码的团队成员很容易忘记它。如果使用转换宏的默认 1 参数版本它能正常工作,那就太好了。”

最佳答案

SetThreadLocale 需要一个语言标识符,但 UTF-8 不是语言标识符——它是一种 Unicode 编码。土地 ID 的目的之一是告诉系统如何处理 128-255 范围内的 ANSI 文本。给定一种真实的语言,在处理此类字符时将使用其代码页。 UTF-8,OTOH,是 Unicode 文本的压缩表示。为了创建 UTF-8 文本,您的输入必须是 Unicode。给定 ANSI 文本,您只是不知道如何转换字符的上限范围。这是“手动”完成的方式,为了将 ANSI 转换为 UTF-8,您必须首先使用具有指定代码页的 MultiByteToWideChar,然后才能将生成的 Unicode 字符串转换为 UTF-8。

现在,回到您的问题 - 我会换一种方式。如果额外的代码页参数让您如此烦恼,请创建一个宏来隐藏它(或继承 CT2A 类并修复第二个参数)。

关于c++ - SetThreadLocale 和 UTF8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1059544/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com