GVKun编程网logo

Python的“此Unicode的最佳ASCII”数据库在哪里?(python unicodedata)

13

如果您对Python的“此Unicode的最佳ASCII”数据库在哪里?和pythonunicodedata感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解Python的“此Unicode的最佳

如果您对Python的“此Unicode的最佳ASCII”数据库在哪里?python unicodedata感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解Python的“此Unicode的最佳ASCII”数据库在哪里?的各种细节,并对python unicodedata进行深入的分析,此外还有关于Python 3 UnicodeEncodeError:’ascii’编解码器无法编码字符、Python ascii utf Unicode、python UnicodeDecodeError: ''ascii'' codec can''t ...、python UnicodeEncodeError: ''ascii'' codec 错误的处理的实用技巧。

本文目录一览:

Python的“此Unicode的最佳ASCII”数据库在哪里?(python unicodedata)

Python的“此Unicode的最佳ASCII”数据库在哪里?(python unicodedata)

我有一些使用Unicode标点符号的文本,例如左双引号,单引号的右单引号等等,我需要用ASCII。Python是否有一个包含这些字符的数据库,这些数据库具有明显的ASCII替代物,所以我可以做得比将它们全部都变成“”更好。?

Python 3 UnicodeEncodeError:’ascii’编解码器无法编码字符

Python 3 UnicodeEncodeError:’ascii’编解码器无法编码字符

我刚刚开始学习 Python,但我已经遇到了麻烦.
我有一个只有一个命令的简单脚本:
#!/usr/bin/env python3
print("Příliš žluťoučký kůň úpěl ďábelské ódy.") # Text in Czech

当我尝试运行此脚本时:

python3 hello.py

我收到这条消息:

Traceback (most recent call last):
  File "hello.py",line 2,in <module>
    print("P\u0159\xedli\u0161 \u017elu\u0165ou\u010dk\xfd k\u016fn \xfap\u011bl \u010f\xe1belsk\xe9 \xf3dy.")
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-2: ordinal not in range(128)

我正在使用Kubuntu 16.04和Python 3.5.2.
当我尝试这个:导出PYTHONIOENCODING = utf-8它只能暂时工作.下次我打开bash时遇到了同样的错误.

根据https://docs.python.org/3/howto/unicode.html#the-string-type
Python源代码的默认编码是UTF-8.
所以我把源文件保存为id UTF-8,Konsole设置为UTF-8但我仍然得到错误!
即使我补充说

# -*- coding: utf-8 -*-

从一开始它什么都不做.

另一个奇怪的事情:当我只使用python而不是python3运行它时,它可以工作.如何在Python 2.7.12中工作而不是在3.5.2中工作?

永久解决这个问题的任何想法?谢谢.

解决方法

感谢Mark Tolen和Alastair McCormack建议问题所在.问题出在区域设置中.
当我运行语言环境时,输出是:
LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC=cs_CZ.UTF-8
LC_TIME=cs_CZ.UTF-8
LC_COLLATE=cs_CZ.UTF-8
LC_MONETARY=cs_CZ.UTF-8
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT=cs_CZ.UTF-8
LC_IDENTIFICATION="C"
LC_ALL=

此“C”是使用ANSI charmap的默认设置.这就是问题所在.运行locale charmap给了我:ANSI_X3.4-1968,它不能显示非英文字符.
我用这个Ubuntu documentation site解决了这个问题.

我将这些行添加到/ etc / default / locale:

LANGUAGE=cs_CZ.UTF-8
LC_ALL=cs_CZ.UTF-8

然后,您必须重新启动会话(注销并进入)才能应用这些设置.

运行语言环境现在返回此输出:

LANG=C
LANGUAGE=cs
LC_CTYPE="cs_CZ.UTF-8"
LC_NUMERIC="cs_CZ.UTF-8"
LC_TIME="cs_CZ.UTF-8"
LC_COLLATE="cs_CZ.UTF-8"
LC_MONETARY="cs_CZ.UTF-8"
LC_MESSAGES="cs_CZ.UTF-8"
LC_PAPER="cs_CZ.UTF-8"
LC_NAME="cs_CZ.UTF-8"
LC_ADDRESS="cs_CZ.UTF-8"
LC_TELEPHONE="cs_CZ.UTF-8"
LC_MEASUREMENT="cs_CZ.UTF-8"
LC_IDENTIFICATION="cs_CZ.UTF-8"
LC_ALL=cs_CZ.UTF-8

并运行locale charmap返回:

UTF-8

Python ascii utf Unicode

Python ascii utf Unicode

当我解析XML时p = xml.parsers.expat.ParserCreate()

<name>Fortuna D&#252;sseldorf</name>

字符解析事件处理程序包括u''\xfc''

怎么能u''\xfc''变成u''ü''


这是本文中的主要问题,其余仅显示对此的进一步(令人发指)的想法

Python unicode不会被破坏,因为它u''\xfc''会产生收益u''ü''吗?u’\
xfc’已经是一个unicode字符串,因此再次将其转换为unicode不起作用!将其转换为ASCII也不起作用。

我发现唯一可行的方法是:(这不是故意的,对吧?)

exec( ''print u\'''' + ''Fortuna D\xfcsseldorf''.decode(''8859'') + u''\'''')

用utf-8替换8859失败!这有什么意义呢?

另外,Python unicode
HOWTO有什么意义?-它仅提供失败示例,而不是说明如何进行实际操作中实际使用的转换(尤其是在这里提出类似问题的ppl猎犬)。

Unicode并不是魔术-为什么这里有那么多的ppl出现问题?

Unicode转换的根本问题很简单:

一个双向查找表’\ xFC’<->u’ü’

unicode( ''Fortuna D\xfcsseldorf'' )

为什么Python的创建者认为显示错误而不是简单地产生此错误更好的原因是u''Fortuna Düsseldorf''什么?

还有为什么他们使它不可逆?

 >>> u''Fortuna Düsseldorf''.encode(''utf-8'') ''Fortuna D\xc3\xbcsseldorf'' >>> unicode(''Fortuna D\xc3\xbcsseldorf'',''utf-8'') u''Fortuna D\xfcsseldorf''

答案1

小编典典

已经拥有了价值 。Python只是通过为您提供ASCII友好的表示形式来尝试简化 调试
。在解释器中回显值会为您提供调用repr()结果的结果。

换句话说,您正在将值的 表示
与值本身混淆。该表示旨在安全地复制和粘贴,而不必担心其他系统如何处理非ASCII代码点。因此,使用了Python字符串文字语法,所有不可打印的和非ASCII字符都由\xhh\uhhhh转义序列代替。将这些字符串粘贴回Python字符串或交互式Python会话中,将再现完全相同的值。

如此ü已被替换\xfc,因为这是带有DIAERESIS代码点的U +
00FC拉丁文小写字母U的 Unicode代码
点。

如果您的终端配置正确,则可以使用print,Python会将Unicode值编码到您的终端编解码器中,从而在终端显示中显示非ASCII字形:

>>> u''Fortuna Düsseldorf''u''Fortuna D\xfcsseldorf''>>> print u''Fortuna Düsseldorf''Fortuna Düsseldorf

如果为终端配置了UTF-8,则还可以在显式编码后将UTF-8字节直接写入终端:

>>> u''Fortuna Düsseldorf''.encode(''utf8'')''Fortuna D\xc3\xbcsseldorf''>>> print u''Fortuna Düsseldorf''.encode(''utf8'')Fortuna Düsseldorf

另一种方法是升级到Python
3;有repr()只使用针对没有可打印的字符的码点的转义序列(控制码,保留码点,替代物,等等;如果码点是不是一个空间,但在下降C*Z*一般类别,它被转义)。新ascii()功能repr()仍然为您提供Python
2的行为。

python UnicodeDecodeError: ''ascii'' codec can''t ...

python UnicodeDecodeError: ''ascii'' codec can''t ...

我用的windows系统,Python2.7 

总是报错:UnicodeDecodeError: ''ascii'' codec can''t decode byte 0xe3 in position 0: ordinal not in range(128)

终于找到解决方法了:

在python的Lib/site-packages 文件夹下新建sitecustomize.py 

内容:

#encoding=utf8
import sys

reload(sys)
sys.setdefaultencoding(''utf-8'')


python UnicodeEncodeError: ''ascii'' codec 错误的处理

python UnicodeEncodeError: ''ascii'' codec 错误的处理

今天用pyhon写入文本文件时发生了错误:

UnicodeEncodeError: ''ascii'' codec can''t encode characters in position 96-98: ord
inal not in range(128)

解决方法:

在脚本文件开头加上

import sys

reload(sys)

sys.setdefaultencoding( "utf-8" )

我们今天的关于Python的“此Unicode的最佳ASCII”数据库在哪里?python unicodedata的分享已经告一段落,感谢您的关注,如果您想了解更多关于Python 3 UnicodeEncodeError:’ascii’编解码器无法编码字符、Python ascii utf Unicode、python UnicodeDecodeError: ''ascii'' codec can''t ...、python UnicodeEncodeError: ''ascii'' codec 错误的处理的相关信息,请在本站查询。

本文标签: