gpt4 book ai didi

winapi - IMul​​tiLanguage2::ConvertStringFromUnicode - 如何避免复合前缀?

转载 作者:行者123 更新时间:2023-12-01 23:42:52 25 4
gpt4 key购买 nike

我正在使用 IMultilanguage2::ConvertStringFromUnicode 从 UTF-16 进行转换。对于某些语言(日语、中文、韩语),我得到一个转义序列(例如代码页 50225(ISO-2022 韩语)的 0x1B、0x24、0x29、0x43)。 WideCharToMultiByte 表现出相同的行为。

我正在构建一个 MIME 消息,因此编码在 header 本身中指定,转义前缀按原样显示。

有没有没有前缀的转换方法?

谢谢!

最佳答案

我真的看不出这里有什么问题。这是 ISO 2022 中的有效字节序列:

Escape sequences to designate character sets take the form ESC I [I...] F, where there are one or more intermediate I bytes from the range 0x20–0x2F, and a final F byte from the range 0x40–0x7F. (The range 0x30–0x3F is reserved for private-use F bytes.) The I bytes identify the type of character set and the working set it is to be designated to, while the F byte identifies the character set itself.
...
Code: ESC $ ) F
Hex: 1B 24 29 F
Abbr: G1DM4
Name: G1-designate multibyte 94-set F
Effect: selects a 94n-character set to be used for G1.

因为 F 是 0x43 (C),这个字节序列告诉解码器切换到 ISO-2022-KR:

Character encodings using ISO/IEC 2022 mechanism include:
...
ISO-2022-KR. An encoding for Korean.
ESC $ ) C to switch to KS X 1001-1992, previously named KS C 5601-1987 (2 bytes per character) [designated to G1]

在这种情况下,您必须指定 iso-2022-kr 作为 MIME Content-TypeRFC2047 中的字符集-编码的标题。但是 ISO 2022 解码器仍然必须能够在解码时动态切换字符集,因此数据包含到韩文字符集的初始切换序列是有效的。

Is there a way to convert without the prefix?

不适用于 IMultiLanguage2WideCharToMultiByte(),不。他们不知道您将如何使用他们的输出,因此为什么他们将初始切换序列包含到韩文字符集是有道理的 - 因此无法访问来自 MIME(或其他来源)的字符集信息的解码器仍然知道要使用什么字符集最初使用。

当您将数据放入 MIME 消息时,您必须在将 MIME 字符集设置为 iso-2022-kr 时手动去除字符集开关序列。如果您不想手动剥离它,则必须找到(或编写)不输出该初始开关序列的 Unicode 编码器。

关于winapi - IMul​​tiLanguage2::ConvertStringFromUnicode - 如何避免复合前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30497206/

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