避免手动解码代码中的许多字符串
Avoid manually decoding many strings in code
我在 Python 工作。因为我必须经常输入 .decode('utf-8')
,所以我想自动解码它。
- 有没有办法让所有字符串自动从 utf-8 解码?
第二个问题:
- 有什么缺点吗?
PS:我必须解码特别是变音符号出现像 'Čečensko'
的字符串
示例如下:
result={}
if 'Ulice: ' in spans.keys():
result['ulica']=spans['Ulice: ']
else:
result['ulica']=''
if 'Kontaktní osoba: '.decode('utf-8') in spans.keys():
result['kontaktna osoba']=spans['Kontaktní osoba: '.decode('utf-8')]
else:
result['kontaktna osoba']=''
if 'Město: '.decode('utf-8') in spans.keys():
result['mesto']=spans['Město: '.decode('utf-8')]
else:
result['mesto']=''
if 'PSČ: '.decode('utf-8') in spans.keys():
result['psc']=spans['PSČ: '.decode('utf-8')]
else:
result['psc']=''
if 'Telefon: ' in spans.keys():
result['telefon']=spans['Telefon: ']
else:
result['telefon']=''
在文件的顶部我必须有 # -*- coding: utf-8 -*-
否则会引发错误。
我是西班牙程序员,我们遇到了一些特殊字符的问题。 python 对我来说最棒的事情是使用:
您可以尝试这样做:
myString = u'Čečensko' # Check the u before the string
通过使用 unicode,您可以避免每次都进行编码和解码,您只需在任何字符串前添加一个 u
,如上例。
如果您将所有字符串都管理为 unicode 字符,我保证您会避免很多麻烦!
您的代码可以是:
result={}
if u'Ulice: ' in spans.keys():
result[u'ulica']=spans[u'Ulice: ']
else:
result[u'ulica']=''
if u'Kontaktní osoba: ' in spans.keys():
result[u'kontaktna osoba']=spans[u'Kontaktní osoba: ']
else:
result[u'kontaktna osoba']=''
if u'Město: ' in spans.keys():
result[u'mesto']=spans[u'Město: ']
else:
result[u'mesto']=''
if u'PSČ: ' in spans.keys():
result[u'psc']=spans[u'PSČ: ']
else:
result[u'psc']=''
if u'Telefon: ' in spans.keys():
result[u'telefon']=spans[u'Telefon: ']
else:
result[u'telefon']=''
但是你需要到处使用 unicode 字符串,你在这个函数中使用的字典的键也应该使用 unicode 字符创建,一旦你习惯了到处使用它会节省你很多时间.
python 中的词典基本上是一个实现 few methods 的 class,可能对您很重要:
__contains__(self, key)
def __getitem__(self, key)
def __setitem__(self, key, value)
def __delitem__(self, key)
你基本上只是希望他们将每个键编码为字节,如果它还没有的话,例如像这样:
if isinstance(key, str):
return key.encode('utf-8')
return key
所以你可以简单地将默认字典包装到你自己的字典中:
class SDict(dict):
@staticmethod
def prepare_key(key):
if isinstance(key, str):
return key.encode('utf-8')
return key
def __contains__(self, key):
return super().__contains__(self.prepare_key(key))
def __getitem__(self, key):
return super().__getitem__(self.prepare_key(key))
def __setitem__(self, key, value):
return super().__getitem__(self.prepare_key(key), value)
def __delitem__(self, key):
return super().__delitem__(self.prepare_key(key))
您可以从普通 dict
对象初始化它:
>>> d1 = {b'a': 1, b'b': 2}
>>> d2 = SDict(d1)
>>> d2
{b'a': 1, b'b': 2}
in
运算符正常工作:
>>> 'a' in d1
False
>>> 'a' in d2
True
>>> 'c' in d2
False
>>> 'c' in d1
False
并且项目选择也可以正常工作:
>>> d1['a']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'a'
>>> d1[b'a']
1
>>> d2[b'a']
1
>>> d2['a']
1
我在 Python 工作。因为我必须经常输入 .decode('utf-8')
,所以我想自动解码它。
- 有没有办法让所有字符串自动从 utf-8 解码?
第二个问题:
- 有什么缺点吗?
PS:我必须解码特别是变音符号出现像 'Čečensko'
的字符串示例如下:
result={}
if 'Ulice: ' in spans.keys():
result['ulica']=spans['Ulice: ']
else:
result['ulica']=''
if 'Kontaktní osoba: '.decode('utf-8') in spans.keys():
result['kontaktna osoba']=spans['Kontaktní osoba: '.decode('utf-8')]
else:
result['kontaktna osoba']=''
if 'Město: '.decode('utf-8') in spans.keys():
result['mesto']=spans['Město: '.decode('utf-8')]
else:
result['mesto']=''
if 'PSČ: '.decode('utf-8') in spans.keys():
result['psc']=spans['PSČ: '.decode('utf-8')]
else:
result['psc']=''
if 'Telefon: ' in spans.keys():
result['telefon']=spans['Telefon: ']
else:
result['telefon']=''
在文件的顶部我必须有 # -*- coding: utf-8 -*-
否则会引发错误。
我是西班牙程序员,我们遇到了一些特殊字符的问题。 python 对我来说最棒的事情是使用:
您可以尝试这样做:
myString = u'Čečensko' # Check the u before the string
通过使用 unicode,您可以避免每次都进行编码和解码,您只需在任何字符串前添加一个 u
,如上例。
如果您将所有字符串都管理为 unicode 字符,我保证您会避免很多麻烦!
您的代码可以是:
result={}
if u'Ulice: ' in spans.keys():
result[u'ulica']=spans[u'Ulice: ']
else:
result[u'ulica']=''
if u'Kontaktní osoba: ' in spans.keys():
result[u'kontaktna osoba']=spans[u'Kontaktní osoba: ']
else:
result[u'kontaktna osoba']=''
if u'Město: ' in spans.keys():
result[u'mesto']=spans[u'Město: ']
else:
result[u'mesto']=''
if u'PSČ: ' in spans.keys():
result[u'psc']=spans[u'PSČ: ']
else:
result[u'psc']=''
if u'Telefon: ' in spans.keys():
result[u'telefon']=spans[u'Telefon: ']
else:
result[u'telefon']=''
但是你需要到处使用 unicode 字符串,你在这个函数中使用的字典的键也应该使用 unicode 字符创建,一旦你习惯了到处使用它会节省你很多时间.
python 中的词典基本上是一个实现 few methods 的 class,可能对您很重要:
__contains__(self, key)
def __getitem__(self, key)
def __setitem__(self, key, value)
def __delitem__(self, key)
你基本上只是希望他们将每个键编码为字节,如果它还没有的话,例如像这样:
if isinstance(key, str):
return key.encode('utf-8')
return key
所以你可以简单地将默认字典包装到你自己的字典中:
class SDict(dict):
@staticmethod
def prepare_key(key):
if isinstance(key, str):
return key.encode('utf-8')
return key
def __contains__(self, key):
return super().__contains__(self.prepare_key(key))
def __getitem__(self, key):
return super().__getitem__(self.prepare_key(key))
def __setitem__(self, key, value):
return super().__getitem__(self.prepare_key(key), value)
def __delitem__(self, key):
return super().__delitem__(self.prepare_key(key))
您可以从普通 dict
对象初始化它:
>>> d1 = {b'a': 1, b'b': 2}
>>> d2 = SDict(d1)
>>> d2
{b'a': 1, b'b': 2}
in
运算符正常工作:
>>> 'a' in d1
False
>>> 'a' in d2
True
>>> 'c' in d2
False
>>> 'c' in d1
False
并且项目选择也可以正常工作:
>>> d1['a']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'a'
>>> d1[b'a']
1
>>> d2[b'a']
1
>>> d2['a']
1