Pracuję nad ładowaniem listy znaków emoji w prostym skrypcie python 3.6. Struktura YAML jest zasadniczo w następujący sposób:Ładowanie znaków specjalnych za pomocą PyYaml
-
-
-
Mój skrypt python wygląda następująco:
import yaml
f = open('emojis.yml')
EMOJIS = yaml.load(f)
f.close()
Dostaję następujący wyjątek:
yaml.reader.ReaderError: unacceptable character #x001d: special characters are not allowed in "emojis.yml", position 2
widziałem opcję allow_unicode=True
ale to wydaje się być dostępne tylko dla yaml.dump. Wygląda na to, że ludzie mieli problemy z podobnymi problemami w Python2, ale ponieważ wszystkie napisy powinny być w Unicode, mam problem z ustaleniem, dlaczego to nie działa.
Próbowałem także owijać moje emotikony w cudzysłowy i używać konstruktora klienta dla "tag: yaml.org, 2002: str". Mój niestandardowy konstruktor nigdy nie jest nawet trafiony, ponieważ lib yaml nie rozpoznaje mojego emoji jako typu string. Obserwuję też to samo zachowanie, gdy definiuję moje emoji bezpośrednio jako ciąg w źródle.
Czy istnieje sposób na załadowanie pliku yaml zawierającego emotikony za pomocą PyYAML?
Nie sądzę, że PyYAML w ogóle obsługuje SMP. –
@ Ignacio Vaazquez-Abrams, przepraszam, nie ma eksperta od unicode. Przez SMP, masz na myśli dodatkowy wielojęzyczny samolot? Czy w SMP zdefiniowano obsługę emoji? –
@QuinnStearns SMP to [dodatkowa płaszczyzna Unicode 1] (https://en.wikipedia.org/wiki/Plane_%28Unicode%29#Overview), a samolot obejmuje te [emotikony] (https: //en.wikipedia. org/wiki/Emoticons_% 28Unicode_block% 29). PyYAML uważa te niedrukowalne na podstawie testu łatwego do modyfikacji. Główny rozwój PyYAML został zatrzymany na długo przed wprowadzeniem emotikonów w 2010 r. (Tj. W Unicode 6.0 i późniejszych), a także powodem, dla którego PyYAML nie obsługuje najnowszego standardu YAML 1.2 (2009). Prostym rozwiązaniem jest przedefiniowanie reguły drukowania znaków unicode do drukowania. – Anthon