Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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
在python3中正确使用unicode字符-强制utf-8编码_Python_Python 3.x_Unicode_Encoding_Utf 8 - Fatal编程技术网

在python3中正确使用unicode字符-强制utf-8编码

在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

我快疯了。请访问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: 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”,是的。至于西铁