gpt4 book ai didi

c++ - 如何在 C++ 中实现与 unicode 无关的大小写不敏感比较

转载 作者:太空宇宙 更新时间:2023-11-04 15:14:54 24 4
gpt4 key购买 nike

我有一个要求,其中我的 C++ 代码需要进行不区分大小写的比较,而不用担心字符串是否经过编码,或者涉及的编码类型。该字符串可以是 ASCII 或非 ASCII,我只需要按原样存储它并将其与第二个字符串进行比较,而不用担心是否设置了正确的语言环境等等。

用例:假设我的应用程序接收到一个最初为“Zoë Saldaña.txt”的字符串(假设它是一个文件名)并按原样存储它。随后,它会收到另一个字符串“zoë saLdañA.txt”,并且通过使用一些 API,该字符串与第一个字符串之间的比较应该会产生匹配结果。同文件名“abc.txt”和“AbC.txt”。

我了解了 IBM 的 ICU 以及它如何默认使用 UTF-16 编码。我很想知道:

  1. ICU 是否提供了一种通过无缝处理字符串(无论其编码类型如何)来解决我的需求的方法?

  2. 如果 1. 的答案是否定的,那么使用 ICU 的 API 将所有字符串(ASCII 和非 ASCII)规范化为 UTF-16 然后进行不区分大小写的比较和其他是否安全操作?

  3. 是否有替代方案可以促进这一点?

我读了这个post ,但它不太符合我的要求。

谢谢!

最佳答案

这个要求是不可能的。计算机不处理字符,而是处理数字。但是“不区分大小写”的比较是对字符起作用的操作。语言环境决定了哪些数字对应哪些字符,因此是必不可少的。

以上不仅适用于所有编程语言,甚至适用于区分大小写的比较。从字符到数字的映射并不总是唯一的。这意味着比较两个数字是行不通的。可能存在字符 42 等同于字符 43 的语言环境。在 Unicode 中,情况更糟。有多个 sequences 具有不同的长度但仍然是等价的。 (特别是预组合和分解字符)

关于c++ - 如何在 C++ 中实现与 unicode 无关的大小写不敏感比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36282246/

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