UnicodeEncodeError: кодек 'ascii' не может кодировать символ u '\ u05a0' в позиции 34: порядковый номер не в диапазоне (128) - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь запустить кусок кода на python, где мне нужно прочитать файл filename.txt, который содержит код формата Json. Но у меня есть некоторые значения Юникода в значениях JSON. Файл очень большой, но я нашел один Unicode в файле как ֠ this символ, чей юникод для Python u"\u05A0"

Вы можете обратиться по этой ссылке для получения дополнительной информации о Unicode Unicode символ 'еврейский акцент 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)

когда я запускаю этот код, я получаю ошибку в качестве заголовка.
Я использую Python 2.7 в оболочке SSH.
Пожалуйста, помогите мне с этим.

Ответы [ 2 ]

1 голос
/ 22 апреля 2019

При обработке юникода в Python2 важно убедиться, что все строки юникод , иначе возникнут проблемы. Поэтому эта строка проблематична:

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

При вызове str on объект Unicode вызовет UnicodeEncodeError, если Unicode не включает символы, отличные от ascii. Так

str(file_data['first_col'])

должно быть

unicode(file_data['first_col'])

Чтобы избежать возможного повреждения Python окончательной строки, все строковые литералы должны быть сделаны в виде юникодных литералов с префиксом u, например

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

Эти шаги обеспечат, чтобы ваше утверждение было в юникоде. В зависимости от конфигурации вашей базы данных может работать оператор Unicode, или вам может понадобиться закодировать оператор в соответствии с любой кодировкой базы данных.

Наконец, создание таких операторов вручную небезопасно и может быть затруднительно для правильного понимания - посмотрите подстановка параметров . Правильно построенное утверждение может выглядеть так:

ex_statement = u"INSERT INTO MYTABLE (col1, col2) VALUES (%s, %s)"
cursor.execute(ex_statement, (u'foo', u'bar'))
0 голосов
/ 22 апреля 2019

Я думаю, вы можете попробовать это,

json_file = open('test.txt','rb')
json_file = json_file.read().decode('UTF-8')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...