gpt4 book ai didi

regex - MFC:检查字符是否为 unicode 的正则表达式是什么?

转载 作者:行者123 更新时间:2023-12-04 06:54:53 25 4
gpt4 key购买 nike

我正在尝试使用 Windows 的 API IsTextUnicode 来检查字符输入是否为 unicode,但有点问题。我想,使用正则表达式可能会更好。但是,我是构建正则表达式的新手。检查字符是否为 unicode 的正则表达式是什么?

谢谢...

最佳答案

好吧,这取决于您所说的“Unicode”是什么意思。正如迄今为止的答案所说,几乎所有字符都是“Unicode”。

Windows 滥用术语“Unicode”来表示 Win32 API 在内部使用的 UTF-16LE 编码。您可以通过查找前面的字节顺序标记来检测 UTF-16,字节 FF FE对于 UTF-16LE(或 FE FF 对于 UTF-16BE)。可能会有未标记 BOM 的 UTF-16 文本,但这是一个非常糟糕的消息,因为您只能通过纯粹的猜测来检测它。

纯猜测是什么IsTextUnicode功能就是一切。它查看输入字节,并通过查看常见模式在其中出现的频率,猜测字节表示 UTF-16LE 或 UTF-16BE 编码字符的可能性。由于每个字节序列都可能是字符 (*) 的有效编码,您可能会认为这不是很可预测或可靠。你是对的。

请参阅 Windows i18n 大师 Michael Kaplan 的 descriptionIsTextUnicode以及为什么这可能不是一个好主意。

通常,您需要一种更可预测的方式来猜测一组字节代表什么编码。你可以试试:

  • 如果它开始 FE FF ,它是 UTF-16LE,Windows 认为它​​是“Unicode”;
  • 如果它开始 FF FE ,它是 UTF-16BE,Windows 同样误导性地将其称为“反向”Unicode;
  • 否则检查整个字符串是否有无效的 UTF-8 序列。如果没有,则可能是 UTF-8(或只是 ASCII);
  • 否则尝试系统默认代码页。

  • (*: 实际上并不完全正确。除了像 U+FFFF 这样的非字符之外,还有许多 UTF-16 代码单元序列不是有效字符,这要归功于“代理”方法在外部编码字符16 位范围。然而 IsTextUnicode 无论如何都不知道这些,因为它早于星光层。)

    关于regex - MFC:检查字符是否为 unicode 的正则表达式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2673177/

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