У меня есть список переменных с символами Юникода, некоторые из них для химических веществ, таких как газ озона: например, «O \ u2083». Все они хранятся в базе данных sqlite, которая считывается в коде Python для получения O . Однако, когда я читаю, я получаю «O \\ u2083». База данных sqlite создается с использованием файла csv, который содержит строку 'O \ u2083' среди других. Я понимаю, что \ u2083 не хранится в базе данных sqlite как символ Unicode, а как 6 символов Unicode (которые будут \, u, 2,0,8,3). Есть ли способ распознавать символы Unicode в этом контексте? Теперь мой первый вариант решения этой задачи - создать функцию для распознавания набора символов и замены символов Unicode. Есть ли что-то подобное уже реализовано?Чтение символов Юникода из базы данных файла/sqlite и использования его в Python
ответ
Если у вас есть байтовая строка (длина 7), декодируйте escape-код Unicode.
>>> s = 'O\u2083'
>>> len(s)
7
>>> s
'O\\u2083'
>>> print(s)
O\u2083
>>> u = s.decode('unicode-escape')
>>> len(u)
2
>>> u
u'O\u2083'
>>> print(u)
O₃
Оговорка: Консоль/IDE используется для печати символов необходимо использовать кодировку, которая поддерживает характер или вы получите UnicodeEncodeError
при печати. Шрифт также должен поддерживать символ.
Важно помнить, что все байты. Чтобы вытащить байты в нечто полезное для вас, вам нужно знать, какая кодировка используется при загрузке данных. Слишком много неоднозначных случаев для определения кодирования путем анализа данных. Когда вы отправляете данные из своей программы, все возвращается обратно в байты. В зависимости от того, используете ли вы Python 2.x или 3.x, у вас будет совсем другой опыт работы с Unicode и Python.
Вы можете, однако, попытаться кодировать и просто «заменить» на ошибки. Например, the_string.encode("utf-8","replace")
будет пытаться кодировать как utf-8 и заменяет проблемы ?
. Вы также можете предвидеть проблемные символы и их заменять заранее, но это быстро становится неуправляемым. Взгляните на классы codecs
для получения дополнительных возможностей замены.
спасибо, но дело в моем случае. У меня только юникод, но «\ u2083» - это 6 символов, а не один, как мне нужно.Мне нужно преобразовать одну строку с 6 символами ('\ u2083') в один символ Юникода (\ u2083, маленький 3 в озоне) и сделать это с любым другим символом. Я могу сделать функцию с таблицей unicode и делать некоторые замены, когда это необходимо, но если есть другой способ управления, было бы хорошо. – awulll
SQLite позволяет вам читать/писать текст Unicode напрямую. u'O\u2083'
is два знаков u'O'
и u'\u2083'
(ваш вопрос опечаток: 'u\2083' != '\u2083'
).
Я понимаю, что и \ 2083 не хранятся в базе данных SQLite, как юникода характер, но как 6 символов Юникода (который будет U, \, 2,0,8,3)
Дон 't путать u'u\2083'
и u'\u2083'
: последний является одиночным символом, в то время как первый является 4-символьной последовательностью: u'u'
, u'\x10'
('\20'
- это восьмеричный код на Python), u'8'
, u'3'
.
Если вы сохраняете один символ Unicode u'\u2083'
в базе данных SQLite; он сохраняется как один символ Unicode (внутреннее представление Unicode внутри базы данных не имеет значения до тех пор, пока выполняется абстракция).
На Python 2, если нет from __future__ import unicode_literals
в верхней части модуля затем 'abc'
строковый литерал создает байтовую строку вместо строки Unicode - в этом случае как 'u\2083'
и '\u2083'
являются последовательностями байт, а не текстовые символов (\uxxxx
не распознается как escape-последовательность unicode внутри байтов).
Я отредактировал сейчас. Была моя ошибка. Это! Простите за это! – awulll
- 1. Чтение символов Юникода из базы данных Access через JDBC-ODBC
- 2. добавление Юникода символов в выпуске базы данных
- 3. Чтение символов Юникода из файла в C
- 4. питона чтение Юникода символов из HTML
- 5. чтение символов юникода из файла свойств java
- 6. Чтение данных Юникода из базы данных Access с использованием JDBC
- 7. Чтение кодированных символов Юникода в мое приложение
- 8. Чтение изображения из базы данных и хранение его в другом
- 9. Чтение данных из базы данных и отобразить его в JSP
- 10. Чтение Юникода из CSV
- 11. Поиск символов Юникода в Python
- 12. Печать и запись символов Юникода в Python
- 13. Каков правильный способ использования символов Юникода в регулярном выражении python
- 14. Чтение символов Юникода из текстового файла в Delphi 2009
- 15. Чтение Юникода из консоли
- 16. Чтение символов Юникода из MySQL с помощью PHP
- 17. Чтение двоичных данных (тип данных изображения) из базы данных SQL и раздувать его, Matlab против Python
- 18. Чтение музыкального пути из базы данных и его воспроизведение
- 19. Чтение юникода из sqlite db с использованием python
- 20. Обнаружение символов персонального использования юникода с использованием python
- 21. SQLAlchemy и python - извлечение символов не-ascii из базы данных
- 22. Отображение символов юникода в codemirror
- 23. Чтение символов Юникода из аргументов командной строки в Python 2.x в Windows
- 24. чтение юникода из sqlite и создание NSString
- 25. Чтение данных из базы данных в vb.net
- 26. Чтение символов из изображения
- 27. нужны символы Юникода в UITableView из SQLite базы данных
- 28. Подсчет числа символов Юникода для базы данных MySQL
- 29. Чтение из базы данных местоположений
- 30. Печать всех символов Юникода в Python
Perfect !!!! Именно то, что мне нужно! Спасибо огромное! – awulll
@awulll: в большинстве случаев '.decode ('unicode-escape')' указывает на ошибку в вашем коде (или вверх по потоку) - не использовать его - он фиксирует симптомы поверхности, игнорируя основную проблему. Например, если формат ввода содержит текст JSON, то правильное решение должно использовать модуль 'json' для его анализа вместо' unicode-escape' - в вашем вопросе недостаточно подробностей, чтобы расшифровать, каков ваш фактический формат ввода. SQLite может и должен хранить один символ Unicode вместо последовательности байтов - исправить процесс, который записывает данные в базу данных и/или файл cvs. – jfs
@ J.F.Sebastian, спасибо за комментарий. Ваш ответ тоже полезен. В то время как «unicode-escape» помогает мне стать всего лишь небольшой точкой во всех моих вещах, но в будущем мне придется переписать некоторые базы данных SQLite, и ваш совет будет рассмотрен! Спасибо! – awulll