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
유니코드의 경우 casefold
대소문자 구분은 소문자와 유사하지만 문자열에서 모든 대소문자 구분을 제거하기 때문에 더 공격적입니다. 예를 들어 독일어 소문자 'ß'는 이미 소문자이기 때문에 lower()는 'ß'에 대해 아무 작업도 수행하지 않으며, casefold()는 이를 "ss"로 변환합니다.
lower()
은 ASCII, 즉 'A-Z'
에만 유효하지만, 다른 언어에 소문자가 있으면 아무것도 할 수 없습니다. 문서에 제시된 예는 독일어로 'ß'
의 소문자는 'ss'
입니다(저도 이 내용을 이해하지 못합니다):
요약하자면 중국어, 영어 환경에서는 lower()
을 계속 사용해도 문제가 없고, 다른 언어와 대문자를 처리해야 할 때는 casefold()
을 사용하면 됩니다.
https://docs.python.org/3/library/stdtypes.html#str.casefold