Python编解码器编码不起作用

时间:2016-09-22 21:50:43

标签: python python-2.7

我有这段代码

<body>


<?php
$db_name = "smoothie";
$mysql_username = "root";
$mysql_password = "";
$server_name = "localhost";

$usr = $_POST["username"];
$pass = $_POST["password"];

$conn = mysql_connect($server_name,$mysql_username,$mysql_password,$db_name);

$query = "INSERT INTO members (username, password)
VALUES ('$usr','$pass')";


?>

我正在阅读的CSV文件包含巴西葡萄牙语字符。当我尝试运行它时,我收到一个错误:

import collections
import csv
import sys
import codecs
from xml.dom.minidom import parse
import xml.dom.minidom

String = collections.namedtuple("String", ["tag", "text"])

def read_translations(filename): #Reads a csv file with rows made up of 2 columns: the string tag, and the translated tag
    with codecs.open(filename, "r", encoding='utf-8') as csvfile:
        csv_reader = csv.reader(csvfile, delimiter=",")
        result = [String(tag=row[0], text=row[1]) for row in csv_reader]
    return result

我正在使用Python 2.7。正如您所看到的,我使用编解码器进行编码,但它不起作用。

有什么想法吗?

1 个答案:

答案 0 :(得分:-1)

这一行的想法:

with codecs.open(filename, "r", encoding='utf-8') as csvfile:

是说“此文件已保存为utf-8。请在阅读时进行适当的转换。”

如果文件实际保存为utf-8,则可以正常工作。如果使用了其他编码,那就不好了。

那么呢?

确定使用了哪种编码。假设无法从创建文件的软件中获取信息 - 猜测。

正常打开文件并打印每一行:

with open(filename, 'rt') as f:
    for line in f:
        print repr(line)

然后查找不是ASCII的字符,例如 - 这封信将作为一些代码打印出来,例如:

'espa\xc3\xb1ol'

上面,ñ表示为\xc3\xb1,因为这是它的utf-8序列。

现在,您可以查看各种编码的内容,看看哪个是正确的:

>>> ntilde = u'\N{LATIN SMALL LETTER N WITH TILDE}'
>>> 
>>> print repr(ntilde.encode('utf-8'))
'\xc3\xb1'
>>> print repr(ntilde.encode('windows-1252'))
'\xf1'
>>> print repr(ntilde.encode('iso-8859-1'))
'\xf1'
>>> print repr(ntilde.encode('macroman'))
'\x96'

或打印所有这些:

for c in encodings.aliases.aliases:
    try:
        encoded = ntilde.encode(c)
        print c, repr(encoded)
    except:
        pass

然后,当您猜到它是哪种编码时,请使用它,例如:

with codecs.open(filename, "r", encoding='iso-8859-1') as csvfile: