这里的代码是Python中的,但是使用locale在C / C ++中的行为应相同。
>>> import locale
>>> locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8")
>>> locale.strxfrm("Gène").startswith(locale.strxfrm("Gè"))
False
我知道不应该这样使用,但是我想知道发生了什么...
上下文:我有一个由strxfrm转换的字符串数组和一个普通的输入文本。我想知道哪些strxfrm转换的字符串以文本before转换开头。完全可行吗?怎么样?
奖金问题:
我们可以获取每个地区的等价字母列表吗?我们可以检查等效的字符串吗?
我的意思是:在"de_DE.UTF8"
中,我可以得到类似的东西吗?>
locale.strxfrm("Wissen").startswith(locale.strxfrm("Wiß"))
返回True吗?
由于排序为"ß" and "ss" are equivalent
(除非是唯一的区别):
> locale.strxfrm("Wiessen") < locale.strxfrm("Wießen") < locale.strxfrm("Wiessen0") True
与法语中的“œ”和“ oe”相同。
EDIT
:关于红利,我看到了Python locale-aware string comparison,但答案依赖于第三方库,因此我提出了一种变通方法hacked function:def isEquivalent(str1, str2):
return ( locale.strxfrm(str2[:-1]) < locale.strxfrm(str1) <= locale.strxfrm(str2) < locale.strxfrm(str1+"0")
or
locale.strxfrm(str1[:-1]) < locale.strxfrm(str2) <= locale.strxfrm(str1) < locale.strxfrm(str2+"0") )
这里的代码在Python中,但是在使用区域设置的C / C ++中,行为应相同。 >>>导入语言环境>>> locale.setlocale(locale.LC_ALL,“ fr_FR.UTF-8”)>>>语言环境....
一个非常有趣的问题!这个答案不是典型的,我认为glibc-dev
将是最佳的论坛。