我有这段代码
<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。正如您所看到的,我使用编解码器进行编码,但它不起作用。
有什么想法吗?
答案 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: