避免在cod中手动解码许多字符串

2024-10-03 11:13:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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 -*-,否则会产生错误。你知道吗


Tags: 字符串inifresultkeys解码elseutf
2条回答

我是西班牙程序员,我们有一些特殊字符的问题。python中最棒的东西是使用:

Python: Unicode

您可以尝试这样做:

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中的Dictionary基本上是一个实现few methods的类,对您来说可能很重要:

基本上你只想让他们把每一个键都编码成字节,如果还没有的话,比如:

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

相关问题 更多 >