Próbuję znaleźć ogólne rozwiązanie do drukowania ciągów unicode ze skryptu Pythona.Drukuj ciąg znaków unicode w pythoniu niezależnie od środowiska
Wymagania są takie, że musi on działać zarówno w pythonie 2.7, jak i w wersji 3.x, na dowolnej platformie, a także z dowolnymi ustawieniami terminali i zmiennymi środowiskowymi (na przykład LANG = C lub LANG = en_US.UTF-8).
Funkcja drukowania Pythona automatycznie próbuje kodować terminal podczas drukowania, ale jeśli kodowanie terminalu jest ascii, nie powiedzie się.
Na przykład, następujące prace, gdy środowisko "LANG = enUS.UTF-8":
x = u'\xea'
print(x)
Ale to nie w Pythonie 2.7, gdy "LANG = C":
UnicodeEncodeError: 'ascii' codec can't encode character u'\xea' in position 0: ordinal not in range(128)
Poniższe działa niezależnie od ustawienia LANG, ale nie wyświetla poprawnie znaków Unicode, jeśli terminal używał innego kodowania Unicode:
print(x.encode('utf-8'))
Pożądanym zachowaniem byłoby zawsze pokazywanie w terminalu kodu unicode i pokazywanie kodowania, jeśli terminal nie obsługuje kodu unicode. Na przykład dane wyjściowe będą kodowane w UTF-8, jeśli terminal obsługuje tylko ASCII. Zasadniczo celem jest zrobienie tego samego, co funkcja drukowania Pythona, gdy działa, ale w przypadkach, gdy funkcja drukowania nie działa, użyj domyślnego kodowania.
• Python 3.0 zapewnia alternatywny typ łańcucha dla danych binarnych i obsługuje tekst w zwykłym typie ciągu znaków (kod ASCII jest traktowany jako prosty typ kodu Unicode). • Python 2.6 udostępnia alternatywny typ łańcucha dla tekstu Unicode w formacie innym niż ASCII, a obsługuje zarówno proste dane tekstowe, jak i binarne w zwykłym typie ciągu. , więc o co pytasz? – Kasramvd
* Jakieś * ustawienia terminala i zmienne środowiskowe? W tym nieprawidłowe? : ^) –
Tak, ponieważ dostaję zgłoszenia błędów nawet wtedy, gdy głównym problemem jest środowisko użytkownika, dlatego chciałbym, aby kod był tak solidny, jak to tylko możliwe. – clark800