Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python2.X中混合使用unicode和str。。。问题?_Python_Email - Fatal编程技术网

在Python2.X中混合使用unicode和str。。。问题?

在Python2.X中混合使用unicode和str。。。问题?,python,email,Python,Email,这会成为未来的问题吗?我搞砸了一些在Python中使用电子邮件模块的内部代码,发现了一些类似这样的代码。mystr总是只有ascii字符,因为它来自一个带有预定义的ascii字符的列表 我没有编写代码,使用strmystr或mystr不会改变问题的实质 在编写第一个代码片段时,我将拥有一个安全的unicode对象,还是必须这样做 或 ? 我知道这不是正确的方法,我知道我应该处理异常,我在这里只询问第一个代码片段是否返回了有效的unicode对象,或者Python在执行时是否弄乱了它的内部结构或其

这会成为未来的问题吗?我搞砸了一些在Python中使用电子邮件模块的内部代码,发现了一些类似这样的代码。mystr总是只有ascii字符,因为它来自一个带有预定义的ascii字符的列表

我没有编写代码,使用strmystr或mystr不会改变问题的实质

在编写第一个代码片段时,我将拥有一个安全的unicode对象,还是必须这样做

?


我知道这不是正确的方法,我知道我应该处理异常,我在这里只询问第一个代码片段是否返回了有效的unicode对象,或者Python在执行时是否弄乱了它的内部结构或其他东西。

尝试将实际的unicode符号放入字符串中,如umlauts或西里尔字母,然后看着地狱般的消失。

尝试将实际的unicode符号放入字符串中

mystr = 'aaaa'
myvar = u'My string %s' % unicode(mystr)
问题是,你很可能会编写你的应用程序,在一个阳光明媚的日子里,一些俄罗斯人或德国人会写下她的名字,突然会因为名字中有一个非ascii符号而收到一个内部服务器错误


我知道。。。我在我的示例中询问了这种情况,仅在


不,不会有问题的。恕我直言,这是Python中的一个错误,因为这是一个bug,等待被咬。这本应该是一个致命的错误,但由于历史原因,我想,它不是

尝试将实际的unicode符号放在字符串中,如umlauts或西里尔字母,然后看着地狱般的消失:

mystr = 'aaaa'
myvar = u'My string %s' % unicode(mystr)
问题是,你很可能会编写你的应用程序,在一个阳光明媚的日子里,一些俄罗斯人或德国人会写下她的名字,突然会因为名字中有一个非ascii符号而收到一个内部服务器错误


我知道。。。我在我的示例中询问了这种情况,仅在


不,不会有问题的。恕我直言,这是Python中的一个错误,因为这是一个bug,等待被咬。这本应该是一个致命的错误,但由于历史原因,我想,它不是

只要常规的8位字符串只包含ASCII字符,就可以了。如果您确实只需要ASCII码,则可以这样做以节省处理时间和/或内存空间


这会成为未来的问题吗?是的,如果您可能以非ASCII字符集获取输入并将其保存为字符串。通常来说,保持一致性也是一个好主意——如果您广泛需要Unicode,不要将字符串用作文本的存储,除非另有充分理由。

只要常规的8位字符串只包含ASCII字符,就可以了。如果您确实只需要ASCII码,则可以这样做以节省处理时间和/或内存空间



这会成为未来的问题吗?是的,如果您可能以非ASCII字符集获取输入并将其保存为字符串。通常来说,保持一致性也是一个好主意——如果您需要广泛使用Unicode,请不要在任何地方使用字符串作为文本存储,除非另有充分理由。

我知道。。。在我的示例中,我询问了这种情况,仅在mystr中使用ascii。仅使用ascii是一个愚蠢的假设。总是会有非ascii的数据,你的应用程序会打嗝,你会回到原来的状态,然后开始哭泣。只有ascii数据并不是写坏代码的借口。@Blackmoon:伙计们,我只是想知道这到底会有什么问题。我不想读,不要假设它总是ascii,因为它会。mystr总是来自一个只有ascii字符的预定义列表。那你为什么要在这里调用str呢?我知道。。。在我的示例中,我询问了这种情况,仅在mystr中使用ascii。仅使用ascii是一个愚蠢的假设。总是会有非ascii的数据,你的应用程序会打嗝,你会回到原来的状态,然后开始哭泣。只有ascii数据并不是写坏代码的借口。@Blackmoon:伙计们,我只是想知道这到底会有什么问题。我不想读,不要假设它总是ascii,因为它会。mystr总是来自一个只有ascii字符的预定义列表。那你为什么要在这里调用str呢?2次投票?2张反对票将被否决appropriate@Blackmoon:我在问题中添加了更多信息。mystr将始终只有ascii字符。您预计会出现什么问题?mystr将始终只有ascii字符。不是编写有效代码的可接受关联。@David Heffernan:无。这就是为什么我要2票?2张反对票将被否决appropriate@Blackmoon:我在问题中添加了更多信息。mystr将始终只有ascii字符。您预计会出现什么问题?mystr将始终只有ascii字符。不是编写有效代码的可接受关联。@David Heffernan:无。这就是我问的原因。
mystr = 'aaaa'
myvar = u'My string %s' % unicode(mystr)
s = 'свят' # world
v = u'здравей %s' % s # hello %s 

Traceback (most recent call last):
File "<input>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd1 in position 0: ordinal not in range(128)