获取 unicode 代码点的大写或小写(如 uint32_t)
Getting the upper or lower case of a unicode code point (as uint32_t)
有没有办法获取给定 unicode 代码点(或等效的 utf-8 代码单元序列)的大写或小写字符?
我读到这可以用 ICU 完成,但这是我唯一需要 ICU 的东西,所以我不想导入整个巨大的库(及其许可证和依赖项,如果有的话) ) 对于单个功能。
我还了解到大写和小写取决于语言环境。这到底是什么意思?
感谢您的帮助。
PS: 无法使用 C++11,使用 VS2005
ICU 是这方面的正确工具。大小写折叠(多个符号表示相同的想法 "letter")在一般形式中是一个棘手的概念。
i
的大写形式是什么?我们在哪个国家,我们用什么语言写作?英语有一对Ii
。土耳其语有两对:İi
和 Iı
。所以它不是那么简单,并解释了问题的 "locale matters" 部分。
另一个有趣的案例是德语 ß
(Eszett 或英语 "sharp S")的首都。它的大写形式是两个字母,SS
。因此,无法保证字符串的大写形式甚至会包含相同数量的字母。
可能有一些小型库只专注于大小写折叠,但我不知道。一般要想合理的做Unicode,就得做大量的Unicode。
有没有办法获取给定 unicode 代码点(或等效的 utf-8 代码单元序列)的大写或小写字符?
我读到这可以用 ICU 完成,但这是我唯一需要 ICU 的东西,所以我不想导入整个巨大的库(及其许可证和依赖项,如果有的话) ) 对于单个功能。
我还了解到大写和小写取决于语言环境。这到底是什么意思?
感谢您的帮助。
PS: 无法使用 C++11,使用 VS2005
ICU 是这方面的正确工具。大小写折叠(多个符号表示相同的想法 "letter")在一般形式中是一个棘手的概念。
i
的大写形式是什么?我们在哪个国家,我们用什么语言写作?英语有一对Ii
。土耳其语有两对:İi
和 Iı
。所以它不是那么简单,并解释了问题的 "locale matters" 部分。
另一个有趣的案例是德语 ß
(Eszett 或英语 "sharp S")的首都。它的大写形式是两个字母,SS
。因此,无法保证字符串的大写形式甚至会包含相同数量的字母。
可能有一些小型库只专注于大小写折叠,但我不知道。一般要想合理的做Unicode,就得做大量的Unicode。