python 3.3 引入了string.casefold
方法,其效果和 string.lower
非常类似,都可以把字符串变成小写,那么它们之间有什么区别?什么时候该用string.casefold
而非string.lower
??
In [5]: name = 'Xu Zhoufeng'
In [6]: name.casefold()
Out[6]: 'xu zhoufeng'
In [7]: cname = 'Yu Dongfeng'
In [8]: cname.lower()
Out[8]: 'yu dongfeng'
PHPz2017-04-17 17:23:54
Unicode には casefold
大文字小文字の区別は小文字化に似ていますが、文字列内のすべての大文字と小文字の区別を削除することを目的としているため、より積極的です。たとえば、ドイツ語の小文字「ß」はすでに小文字であるため、「ss」と同等です。 lower() は 'ß' に対して何も行いません。casefold() はそれを "ss" に変換します。
lower()
は ASCII、つまり 'A-Z'
に対してのみ有効ですが、他の言語で小文字が含まれる場合はどうすることもできません。ドキュメントに示されている例では、ドイツ語の 'ß'
の小文字は 'ss'
です (これも理解できません):
要約すると、中国語と英語の環境では、引き続き lower()
を使用しても問題ありません。他の言語や大文字を扱う必要がある場合は、casefold()
を使用してください。
https://docs.python.org/3/library/stdtypes.html#str.casefold