UnicodeEncodeError:'ascii'编解码器无法在位置34编码字符u'\ u05a0':序数不在范围内(128)

时间:2019-04-22 09:52:02

标签: python unicode

我正在尝试在python中运行一段代码,在这里我必须读取一个包含Json格式代码的filename.txt文件。但是我在json值中有一些Unicode值。该文件非常大,但我在文件中发现一个Unicode为֠ Python的unicode为u"\u05A0"

的符号

您可以参考此链接以获取有关Unicode Unicode Character 'HEBREW ACCENT TELISHA GEDOLA' (U+05A0)

的更多信息。

我的Python代码看起来像

import MySQLdb
import json



db = MySQLdb.connect(host="10.233.188.84",    # your host, usually localhost
                 user="root",         # your username
                 passwd="freebird@123",  # your password
                 db="Practice_For_Json",)        # name of the data base


#cursor = db.cursor()
json_file = open('asda.txt', 'r' )
file_data = json.load(json_file)
print(file_data)
print(type(file_data))

datas = file_data['datads']
print(datas)
for data in datas:
    ex_statement = "Insert into `tablename` values {first_col '"+str(data['first_col'])+"'}, {second_col  '"+str(data['second_col'])+"'});"
#    cursor.execute(ex_statement)


db.close()

我的杰森(Json)样子:

{"datads" :[{
      "first_col" : "SoomeVAlue_1",
      "second_col" : "SomeValue_1_1"
},
{
     "first_col" : " Unicode_Start ֠  Unicode_End",
     "second_col" : "SomeValue_2_2"
}]}

以上代码的输出为:

{u'datads': [{u'first_col': u'SoomeVAlue_1', u'second_col': u'SomeValue_1_1'}, {u'first_col': u' Unicode_Start \u05a0  Unicode_End', u'second_col': u'SomeValue_2_2'}]}
<type 'dict'>
[{u'first_col': u'SoomeVAlue_1', u'second_col': u'SomeValue_1_1'}, {u'first_col': u' Unicode_Start \u05a0  Unicode_End', u'second_col': u'SomeValue_2_2'}]
Traceback (most recent call last):
  File "abc.py", line 21, in <module>
    ex_statement = "Insert into `tablename` values {first_col '"+str(data['first_col'])+"'}, {second_col  '"+str(data['second_col'])+"'});"




UnicodeEncodeError: 'ascii' codec can't encode character u'\u05a0' in position 15: ordinal not in range(128)

运行此代码时,标题出现错误。
我正在SSH shell中使用Python 2.7。
请帮助我。

2 个答案:

答案 0 :(得分:1)

在Python2中处理unicode时,确保所有字符串均为 unicode 字符串非常重要,否则会出现问题。因此,这行是有问题的:

ex_statement = "Insert into `tablename` values {first_col '"+str(file_data['first_col'])+"'}, {second_col file_data '"+str(['first_col'])+"'});"

如果Unicode取消包含非ASCII字符,则调用str将导致Unicode对象引起UnicodeEncodeError。所以

str(file_data['first_col'])

应该是

unicode(file_data['first_col'])

为避免Python可能破坏最终字符串,例如,应通过在所有字符串文字前加上u作为前缀来使它们成为Unicode文字

u"Insert into `tablename` values {first_col '"

这些步骤将确保您的语句是unicode。根据数据库的配置,可以使用unicode语句,或者您可能需要将该语句编码为数据库所需的任何编码方式。

最后,手动创建这样的语句是不安全的,并且可能难以正确处理-查看parameter substitution。正确构造的语句可能如下所示:

ex_statement = u"INSERT INTO MYTABLE (col1, col2) VALUES (%s, %s)"
cursor.execute(ex_statement, (u'foo', u'bar'))

答案 1 :(得分:-1)

我想你可以试试看,

List<String> titles = Arrays.asList("First Name", "Last Name");

for (FirstClass first : firstClassList) {
    for (SecondClass second : first.getSecondClassList()) {
        for (ThirdClass third : second.getThirdClassList()) {                   

            if(!titles.contains(third.getField())) {
                second.getThirdClassList().remove(third);
            }

        }
    }
}