Найти - Пользователи
Полная версия: Puthon UTF-8 to text
Начало » Python для новичков » Puthon UTF-8 to text
1
zmeykin
Привет всем ! Не могу понять как мне нужно преобразовать строку чтобы она валидно вставилась в 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")})
doza_and
zmeykin
На данный момент строка не ввиде текста а как utf-8 символы
????????????А что такое текст???????????
Запись в utf-8 соответствует стандарту: https://www.json.org/. Никак иначе json нельзя записать, это будет не json.
zmeykin
doza_and
Главный вопрос у меня как преобразовать utf-8 в печатные символы а то у меня все в юникодовских символах (посмотрите во вложение в 1 посте) и причем тут json стандарт? я не про него спрашиваю.
doza_and
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.
py.user.next
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'
>>> 
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB