在python3中正确使用unicode字符-强制utf-8编码
我快疯了。请访问internet并告诉我在Python3.x中,默认编码是UTF-8。除此之外,我的系统的默认编码是UTF-8。除此之外,在python 3.5文件的顶部还有在python3中正确使用unicode字符-强制utf-8编码,python,python-3.x,unicode,encoding,utf-8,Python,Python 3.x,Unicode,Encoding,Utf 8,我快疯了。请访问internet并告诉我在Python3.x中,默认编码是UTF-8。除此之外,我的系统的默认编码是UTF-8。除此之外,在python 3.5文件的顶部还有#-*-编码:utf-8-*- 尽管如此,python仍在使用ascii: # -*- coding: utf-8 -*- mystring = "Ⓐ" print(mystring) 向我问候: SyntaxError: 'ascii' codec can't decode byte 0xe2 in position 7
#-*-编码:utf-8-*-
尽管如此,python仍在使用ascii:
# -*- coding: utf-8 -*-
mystring = "Ⓐ"
print(mystring)
向我问候:
SyntaxError: 'ascii' codec can't decode byte 0xe2 in position 7: ordinal not in range(128)
我也试过这样做:print(mystring.encode(“utf-8”))
和.decode(“utf-8”)
-同样的事情
我错过了什么?如何强制python停止使用ascii编码
编辑:我知道用一个字符串抱怨
位置7
似乎很奇怪,但这是我实际的MCVE和我得到的确切输出。上面是使用pythonshell的,下面是一个脚本。两者都使用python3.5.2
编辑:因为我认为它可能是相关的:我获取的字符串来自外部应用程序,并且不是硬编码的,所以我需要一种方法来获取utf-8字符串并将其保存到文件中。以上只是一个简单化和一般化的例子。这是我的真实代码:
# the variables being a string that might contain unicode characters
mystring = "username: " + fromuser + " | printname: " + fromname
with open("myfile.txt", "a") as myfile:
myfile.write(mystring + "\n")
Python 3.0的新增功能是: 所有文本均为Unicode;但是,编码的Unicode表示为二进制 资料 如果您想尝试输出utf-8,下面是一个示例:
b'\x41'.decode("utf-8", "strict")
如果希望在字符串文本中使用unicode,请使用unicode转义及其编码表示。例如:
print("\u24B6")
Python 3.0的新增功能是: 所有文本均为Unicode;但是,编码的Unicode表示为二进制 资料 如果您想尝试输出utf-8,下面是一个示例:
b'\x41'.decode("utf-8", "strict")
如果希望在字符串文本中使用unicode,请使用unicode转义及其编码表示。例如:
print("\u24B6")
在Python3中,所有字符串都是unicode,因此您遇到的问题可能是由于您的区域设置不正确。Python3解释器希望使用locale环境变量,如果找不到它们,它将模拟基本的ASCII 从locale.py:
except ImportError:
# Locale emulation
CHAR_MAX = 127
LC_ALL = 6
LC_COLLATE = 3
LC_CTYPE = 0
LC_MESSAGES = 5
LC_MONETARY = 4
LC_NUMERIC = 1
LC_TIME = 2
Error = ValueError
。下面是一些解决方法,您可以尝试看看它们是否能让您在正确完成环境设置任务之前工作
1) 验证是否安装了UTF-8语言环境或语言文件(请参阅上面的链接)
2) 尝试将其添加到脚本的顶部
#!/usr/bin/env LC_ALL=en_US.UTF-8 /usr/local/bin/python3
print('カタカナ')
或
或者在执行Python解释器之前导出shell变量
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
python3
>>> print('カタカナ')
很抱歉,我不能说得更具体,因为这些设置是特定于平台和操作系统的。您可以强制尝试,但我不建议这样做,如果没有安装,也不会有帮助
希望对您有所帮助。在Python3中,所有字符串都是unicode,因此您遇到的问题可能是由于您的区域设置不正确。Python3解释器希望使用locale环境变量,如果找不到它们,它将模拟基本的ASCII 从locale.py:
except ImportError:
# Locale emulation
CHAR_MAX = 127
LC_ALL = 6
LC_COLLATE = 3
LC_CTYPE = 0
LC_MESSAGES = 5
LC_MONETARY = 4
LC_NUMERIC = 1
LC_TIME = 2
Error = ValueError
。下面是一些解决方法,您可以尝试看看它们是否能让您在正确完成环境设置任务之前工作
1) 验证是否安装了UTF-8语言环境或语言文件(请参阅上面的链接)
2) 尝试将其添加到脚本的顶部
#!/usr/bin/env LC_ALL=en_US.UTF-8 /usr/local/bin/python3
print('カタカナ')
或
或者在执行Python解释器之前导出shell变量
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
python3
>>> print('カタカナ')
很抱歉,我不能说得更具体,因为这些设置是特定于平台和操作系统的。您可以强制尝试,但我不建议这样做,如果没有安装,也不会有帮助
希望能有所帮助。这给了我
UnicodeDecodeError:“utf-8”编解码器无法解码位置0:无效起始字节的字节0x80,这也不是我需要的。我有一个包含unicode字符的字符串,我只想打印它们(稍后再将它们写入文件)。我很抱歉。请参见示例中的编辑,尝试使用unicode转义序列及其数字代码。现在可以作为示例使用,但我需要一个更好的解决方案。我从外部应用程序获取包含这些unicode字符的字符串,它们不是硬编码的。我的最终目标是使用utf-8编码将该字符串保存到文件中。您可以从源代码中指定编码吗?例如,使用io:>>>>导入io>>f=io.open(“test”,mode=“r”,encoding=“utf-8”)现在可以工作了,问题是我的系统设置了utf-8作为区域设置,但安装不正确。重新生成我的区域设置修复了问题。这给了我UnicodeDecodeError:“utf-8”编解码器无法解码位置0:invalid start byte
中的字节0x80,这也不是我所需要的。我有一个包含unicode字符的字符串,我只想打印它们(稍后再将它们写入文件)。我很抱歉。请参见示例中的编辑,尝试使用unicode转义序列及其数字代码。现在可以作为示例使用,但我需要一个更好的解决方案。我从外部应用程序获取包含这些unicode字符的字符串,它们不是硬编码的。我的最终目标是使用utf-8编码将该字符串保存到文件中。您可以从源代码中指定编码吗?例如,使用io:>>>>导入io>>f=io.open(“test”,mode=“r”,encoding=“utf-8”)现在可以工作了,问题是我的系统设置了utf-8作为区域设置,但安装不正确。“重新生成我的区域设置”修复了这些问题。是否确实使用python3运行脚本?您的错误消息没有意义。如果在Python 3上,mystring是len 1 Unicode字符串。无法调用.decode
(Unicode字符串已编码,未解码),长度为1的字符串不可能调用位置7
。提供一个。如果要使用UTF-8编码编写文件,请将与open('myfile.txt','a',encoding='utf8')一起用作myfile:
。如何调用Python脚本?有一个shell管道进入或离开Python吗?@MarkTolonen我也这么认为,但这是我的MCVE,我完全按照我提供的做了。它在一个字符串上显示“位置7”,是的。至于西铁