我将使用变音符号的大写字母转换为小写字母时遇到问题。
print("ÄÖÜAOU".lower())
A,O和U可以正常转换,但Ä,Ö和Ü保持大写。有什么想法吗?
第一个问题是使用.decode('utf-8')修复的,但我仍然有第二个问题:
# -*- coding: utf-8 -*-
original_message="ÄÜ".decode('utf-8')
original_message=original_message.lower()
original_message=original_message.replace("ä", "x")
print(original_message)
追踪(最近一次通话): 文件“Untitled.py”,第4行,in original_message = original_message.replace(“ä”,“x”) UnicodeDecodeError:'ascii'编解码器无法解码位置0的字节0xc3:序数不在范围内(128)
答案 0 :(得分:8)
除非您使用纯ASCII,否则您需要将其标记为unicode字符串;
> print(u"ÄÖÜAOU".lower())
äöüaou
在处理变量时,它的工作原理相同,这一切都取决于分配给变量的类型。
> olle = "ÅÄÖABC"
> print(olle.lower())
ÅÄÖabc
> olle = u"ÅÄÖABC"
> print(olle.lower())
åäöabc
答案 1 :(得分:3)
您正在处理编码的字符串,而不是unicode文本。
字节字符串的.lower()
方法只能处理ASCII值。将字符串解码为Unicode或使用unicode
文字(u''
),然后使用小写:
>>> print u"\xc4AOU".lower()
äaou
答案 2 :(得分:2)
如果您使用的是Python 2,但又不想在所有字符串前加上“”,请将其放在程序的开头:
from __future__ import unicode_literals
olle = "ÅÄÖABC"
print(olle.lower())
现在将返回:
åäöabc
编码指定如何将从磁盘读入的字符解释为程序,但from __ future __ import语句告诉如何在程序本身中解释这些字符串。你可能需要两者。