Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.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
Python编码问题(可能是从windows到linux的问题)_Python_Linux_Csv_Encoding - Fatal编程技术网

Python编码问题(可能是从windows到linux的问题)

Python编码问题(可能是从windows到linux的问题),python,linux,csv,encoding,Python,Linux,Csv,Encoding,我正在开发一个在windows下用python编写的程序。它正在读取cvs文件。以下是代码的一部分: with open(os.path.abspath(self.currencies_file_path), 'r') as f: reader = csv.reader(f) #for each row find whether such isocode exists in the table for row in reader: #THis is line 49

我正在开发一个在windows下用python编写的程序。它正在读取cvs文件。以下是代码的一部分:

with open(os.path.abspath(self.currencies_file_path), 'r') as f:
    reader = csv.reader(f)
    #for each row find whether such isocode exists in the table
    for row in reader:   #THis is line 49
这就是错误:

  File "whatever/staticdata.py", line 49, in upload_currencies
    for row in reader:
  File "/usr/lib/python3.4/codecs.py", line 313, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf3 in position 1307: invalid continuation byte
csv文件甚至没有使用utf-8编码(我想)。为什么我会有这样的问题


另外,我对编码一无所知。

要检查文件编码,可以使用file命令:

$ file utils.py
utils.py: Python script, UTF-8 Unicode text executable
要转换文件,可以使用iconv命令:

iconv -f ascii -t utf-8 utils.py -o utils.utf8.py
选项:
-f
:来自编码
-t
:进行编码<代码>-o输出文件

最后但并非最不重要的一点是,显式声明编码(在shebang的右上角):

因此,作为一个工作示例,您将有如下内容:

#/usr/bin/env python
# -*- coding: utf-8 -*-
有关iconv支持的编码列表,您可以键入:

iconv -l

要检查文件编码,可以使用file命令:

$ file utils.py
utils.py: Python script, UTF-8 Unicode text executable
要转换文件,可以使用iconv命令:

iconv -f ascii -t utf-8 utils.py -o utils.utf8.py
选项:
-f
:来自编码
-t
:进行编码<代码>-o输出文件

最后但并非最不重要的一点是,显式声明编码(在shebang的右上角):

因此,作为一个工作示例,您将有如下内容:

#/usr/bin/env python
# -*- coding: utf-8 -*-
有关iconv支持的编码列表,您可以键入:

iconv -l

如果你认为它是拉丁语-1,试试这个:

import io
with io.open(os.path.abspath(self.currencies_file_path), encoding='latin-1') as f:
    reader = csv.reader(f)
    for row in reader:

如果你认为它是拉丁语-1,试试这个:

import io
with io.open(os.path.abspath(self.currencies_file_path), encoding='latin-1') as f:
    reader = csv.reader(f)
    for row in reader:

Windows可能正在使用CP-1252


没有办法100%知道文件使用的是哪种编码,请参阅以供参考。如果您使用的是Python3,只需指定打开文件时要使用的编码即可。如果您使用的是Python2,您可以使用它。

Windows可能正在使用CP-1252


没有办法100%知道文件使用的是哪种编码,请参阅以供参考。如果您使用的是Python3,只需指定打开文件时要使用的编码即可。如果您使用的是Python 2,您可以使用。

您知道编码文件是用@user590028编写的吗?我不知道,有没有办法确定它?我想它是拉丁文1。您知道编码文件是用@user590028编写的吗?我不知道,有办法确定吗?我想是拉丁语1。这是我的cvs文件:
data/currences.csv:ISO-8859 text
为什么我会遇到这种问题?Windows和linux使用不同的默认编码。Linux上通常是UTF-8。我很确定你的脚本中没有编码行(以
#-*-编码开始的那一行。如果你不告诉python你使用的是哪一个,我认为默认情况下它使用ascii。linux和windows上可能会有不同的回退。但是最好是明确地告诉它到底是什么。等一下,你说的是CSV文件,而不是python文件。仍然使用iconv命令进行转换。因此python在默认情况下尝试utf-8,这就是它不工作的原因?它必须使用
区域设置(通常为utf-8)或者默认情况下使用utf-8。但是读取csv文件的过程与启动python脚本的过程相同,它默认使用区域设置。这是我的cvs文件:
data/currences.csv:ISO-8859 text
为什么我会遇到这种问题?Windows和linux使用不同的默认编码。在linux上通常是utf-8。我很确定你没有脚本中的编码行(以
#-*-编码开始的那一行。如果你不告诉python你使用的是哪一个,我认为默认情况下它使用ascii。linux和windows上可能会有不同的回退。但是最好是明确地告诉它到底是什么。等一下,你说的是CSV文件,而不是python文件。仍然使用iconv命令进行转换。因此python在默认情况下尝试utf-8,这就是它不工作的原因?它必须使用
区域设置(通常为utf-8)或默认情况下使用utf-8。但是读取csv文件的过程与启动python脚本的过程相同,它默认使用区域设置