Уведомления

Группа в Telegram: @pythonsu

#1 Май 5, 2019 14:13:11

zmeykin
Зарегистрирован: 2019-05-05
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Puthon UTF-8 to text

Привет всем ! Не могу понять как мне нужно преобразовать строку чтобы она валидно вставилась в json файл. На данный момент строка не ввиде текста а как utf-8 символы
Я пробовал так:

  bytes('Появись негодяй!', "utf-8").decode("unicode_escape")
  'Появись негодяй!'.encode("utf-8","ignore").decode("unicode_escape")
  parsedb.insert({'man': 'Появись негодяй!'})
Но всеравно у меня появляеться строка в utf-8 символах. Пример во вложении.

Привер кода:
 # coding: utf-8
from tinydb import TinyDB, Query
from time import strftime
import datetime
date = round(datetime.datetime.now().timestamp())
print(str('Появись негодяй!'))
parsedb = TinyDB('news_s.json')
parsedb.insert({'man': 'Появись негодяй!'.encode("utf-8","ignore").decode("unicode_escape")})

Прикреплённый файлы:
attachment pyterror.PNG (2,3 KБ)

Офлайн

#2 Май 5, 2019 19:13:40

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Puthon UTF-8 to text

zmeykin
На данный момент строка не ввиде текста а как utf-8 символы
????????????А что такое текст???????????
Запись в utf-8 соответствует стандарту: https://www.json.org/. Никак иначе json нельзя записать, это будет не json.



Офлайн

#3 Май 5, 2019 20:29:22

zmeykin
Зарегистрирован: 2019-05-05
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Puthon UTF-8 to text

doza_and
Главный вопрос у меня как преобразовать utf-8 в печатные символы а то у меня все в юникодовских символах (посмотрите во вложение в 1 посте) и причем тут json стандарт? я не про него спрашиваю.

Офлайн

#4 Май 5, 2019 21:32:04

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Puthon UTF-8 to text

zmeykin
а то у меня все в юникодовских символах
У вас на картинке как раз не юникодовские символы, а самое что ни на есть ascii символы.
zmeykin
преобразовать utf-8 в печатные символы
Вопрос непонятен. Вы на бумаге хотите печатать или в консоли чтобы появилось?
на консоли очевидно print
 >>> print("\u041f\u043e\u044f\u0432\u0438\u0441\u044c \u043d\u0435\u0433\u043e\u0434\u044f\u0439!")
Появись негодяй!
Или любым другим способом.

В вашем случае естественный способ считать данные из базы и сделать print.

Вообще запись в json может идти в разных режимах. Может ваша база и предусматривает режимы которые вам больше понравятся (что-то типа allow_unicode для модуля json) Смотрите документацию по tinydb.



Отредактировано doza_and (Май 5, 2019 21:38:13)

Офлайн

#5 Май 6, 2019 02:19:10

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10024
Репутация: +  857  -
Профиль   Отправить e-mail  

Puthon UTF-8 to text

zmeykin
Но всеравно у меня появляеться строка в utf-8 символах. Пример во вложении.
Это не utf-8, это Юникод. Если бы там было utf-8, то кириллические символы занимали бы по два байта.

Если ты не в курсе, utf-8 - это одна из кодировок, которая отображает байтовые последовательности на Unicode. Есть ещё кодировки utf-16 и utf-32, которые тоже отображают байтовые последовательности на Unicode. А кириллические символы находятся в самом Юникоде. Юникод - это такое множество чисел, около миллиона их, где большинству чисел соответствуют изображения символов со всего мира. Многие числа являются служебными, а многие вообще не заняты ничем. И вот кодировка utf-8 просто даёт возможность ссылаться на любое число в Юникоде.

Вот в питоне запись вида ‘\u1234’ - это именно прямая ссылка на число в Unicode, без каких либо кодировок. Поэтому русские буквы в питоне пишутся напрямую, так же как и китайские иероглифы (они тоже есть в Юникоде, причём все 100000, как и корейские).

Китайский иероглиф 我 (wo3) переводится как “я”
  
>>> '\u6211'
'我'
>>> '我'
'我'
>>>
>>> '\u042f'
'Я'
>>> 'Я'
'Я'
>>>

Так вот символы, закодированные в utf-8, не всегда совпадают с их кодами в Unicode.

Пример по букве “Я”
  
>>> '\u042f'
'Я'
>>> 'Я'
'Я'
>>> 'Я'.encode('utf-8')
b'\xd0\xaf'
>>>
В виде кода Юникода буква “Я” является одним числом, а в виде закодированной в utf-8 последовательности буква “Я” является двумя числами, причём вообще другими.

Числа в utf-8 и в Юникоде совпадают только в начале, так как в начале Юникода находится ASCII.
  
>>> '\u0040'
'@'
>>> '@'.encode('utf-8')
b'@'
>>> hex(_[0])
'0x40'
>>> 



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version