Konwertuj ciąg znaków Unicode na ciąg znaków w Pythonie (zawierający dodatkowe symbole)
Jak przekonwertować ciąg znaków Unicode (zawierający dodatkowe znaki jak£ $, itp.) w ciąg Pythona?
8 answers
title = u"Klüft skräms inför på fédéral électoral große"
import unicodedata
unicodedata.normalize('NFKD', title).encode('ascii','ignore')
'Kluft skrams infor pa federal electoral groe'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-30 15:44:32
Możesz użyć kodowania do ASCII, jeśli nie musisz tłumaczyć znaków innych niż ASCII:
>>> a=u"aaaàçççñññ"
>>> type(a)
<type 'unicode'>
>>> a.encode('ascii','ignore')
'aaa'
>>> a.encode('ascii','replace')
'aaa???????'
>>>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-09 04:19:09
>>> text=u'abcd'
>>> str(text)
'abcd'
Jeśli łańcuch zawiera tylko znaki ascii.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-05 15:48:56
Jeśli masz ciąg znaków Unicode i chcesz zapisać go do pliku lub innej postaci serializowanej, musisz najpierw zakodować do określonej reprezentacji, która może być przechowywana. Istnieje kilka popularnych kodowań Unicode, takich jak UTF-16 (używa dwóch bajtów dla większości znaków Unicode) lub UTF-8 (1-4 bajty / punkt kodowy w zależności od znaku), itp. Aby przekonwertować ten ciąg znaków na określone kodowanie, możesz użyć:
>>> s= u'£10'
>>> s.encode('utf8')
'\xc2\x9c10'
>>> s.encode('utf16')
'\xff\xfe\x9c\x001\x000\x00'
Ten surowy ciąg bajtów może być zapisany do pliku. Należy jednak pamiętać, że czytając go z powrotem, musisz wiedzieć, w jakim kodowaniu jest i dekodować go za pomocą tego samego kodowania.
Podczas zapisu do plików można pozbyć się tego ręcznego kodowania/dekodowania za pomocą modułu kodeki. Tak więc, aby otworzyć plik, który koduje wszystkie ciągi Unicode do UTF-8 , użyj:
import codecs
f = codecs.open('path/to/file.txt','w','utf8')
f.write(my_unicode_string) # Stored on disk as UTF-8
Należy pamiętać, że wszystko inne, które używa tych plików, musi zrozumieć, w jakim kodowaniu jest plik, jeśli chcą je przeczytać. Jeśli tylko ty robisz Odczyt/Zapis to nie jest problem, w przeciwnym razie upewnij się, że piszesz w formie zrozumiałej przez cokolwiek innego używa plików.
W Pythonie 3 ta forma dostępu do plików jest domyślna, a wbudowana funkcja open
będzie pobierać parametr kodowania i zawsze tłumaczyć na / z Unicode ciągi znaków (domyślny obiekt string w Pythonie 3) dla plików otwartych w trybie tekstowym.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-09 04:15:17
Oto przykład:
>>> u = u'€€€'
>>> s = u.encode('utf8')
>>> s
'\xe2\x82\xac\xe2\x82\xac\xe2\x82\xac'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-30 15:46:26
Cóż, jeśli chcesz / chcesz przełączyć się na Python 3 (co może nie być spowodowane wsteczną niekompatybilnością z niektórymi kodami Pythona 2), nie musisz wykonywać żadnej konwersji; cały tekst w Pythonie 3 jest reprezentowany przez ciągi Unicode, co oznacza również, że nie ma już użycia składni u'<text>'
. Masz również, co w efekcie, ciągi bajtów, które są używane do reprezentowania danych (które mogą być zakodowane string).
Http://docs.python.org/3.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit
(Oczywiście, jeśli obecnie używasz Pythona 3, problem prawdopodobnie ma związek z tym, jak próbujesz zapisać tekst do pliku.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-30 16:14:33
Oto przykładowy kod
import unicodedata
raw_text = u"here $%6757 dfgdfg"
convert_text = unicodedata.normalize('NFKD', raw_text).encode('ascii','ignore')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-19 07:59:44
import json, ast
jdata = ast.literal_eval(json.dumps(jdata)) # Removing uni-code chars
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-10 06:27:54