- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个要求,其中我的 C++ 代码需要进行不区分大小写的比较,而不用担心字符串是否经过编码,或者涉及的编码类型。该字符串可以是 ASCII 或非 ASCII,我只需要按原样存储它并将其与第二个字符串进行比较,而不用担心是否设置了正确的语言环境等等。
用例:假设我的应用程序接收到一个最初为“Zoë Saldaña.txt”的字符串(假设它是一个文件名)并按原样存储它。随后,它会收到另一个字符串“zoë saLdañA.txt”,并且通过使用一些 API,该字符串与第一个字符串之间的比较应该会产生匹配结果。同文件名“abc.txt”和“AbC.txt”。
我了解了 IBM 的 ICU 以及它如何默认使用 UTF-16 编码。我很想知道:
ICU 是否提供了一种通过无缝处理字符串(无论其编码类型如何)来解决我的需求的方法?
如果 1. 的答案是否定的,那么使用 ICU 的 API 将所有字符串(ASCII 和非 ASCII)规范化为 UTF-16 然后进行不区分大小写的比较和其他是否安全操作?
是否有替代方案可以促进这一点?
我读了这个post ,但它不太符合我的要求。
谢谢!
最佳答案
这个要求是不可能的。计算机不处理字符,而是处理数字。但是“不区分大小写”的比较是对字符起作用的操作。语言环境决定了哪些数字对应哪些字符,因此是必不可少的。
以上不仅适用于所有编程语言,甚至适用于区分大小写的比较。从字符到数字的映射并不总是唯一的。这意味着比较两个数字是行不通的。可能存在字符 42 等同于字符 43 的语言环境。在 Unicode 中,情况更糟。有多个 sequences 具有不同的长度但仍然是等价的。 (特别是预组合和分解字符)
关于c++ - 如何在 C++ 中实现与 unicode 无关的大小写不敏感比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36282246/
我是一名优秀的程序员,十分优秀!