Как да отпечатате ダイスキ с помощта на Python 3.7 в Scite?

Използвам Win10 & Scite с изходен прозорец с активиран utf-8. Файлът се записва като UTF-8 с BOM

Скрипт:

print('ダイスキ from python 3')

Скриптът може да се изпълнява на cmd prompt без грешка. Но когато се стартира на Scite, ще се получи грешка:

Изход:

>pythonw.exe -u "test.py"
Traceback (most recent call last):
  File "test.py", line 12, in <module>
    print('\u30c0\u30a4\u30b9\u30ad from python 3')
  File "D:\BIN\Python37\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 1-2: character maps to <undefined>
>Exit code: 1

Как правилно да отпечатате ダイスキ в stdout с помощта на python3 със Scite?


Актуализации:

Редактирах файла на Scite Global Options, за да поддържа utf-8.

code.page=65001

Тествах C, Lua, стария Python 2.7 и той може да отпечатва utf-8 низове (в прозореца за извеждане на Scite).

Изглежда, че това е грешка в конфигурацията на Scite или може би грешка в Scite, тъй като прозорецът на изходния терминал на Scite работи на Lua & C, но не успява само на Python3.

скриптът


person dns    schedule 14.12.2018    source източник
comment
Защо цялото това навеждане с encode и decode? Какво ще кажете за обикновен print('ダイスキ')?   -  person deceze♦    schedule 14.12.2018
comment
Е, мисля, че проблемът е с изхода на терминала. Скриптът може да се изпълнява на cmd prompt, но със странен текст и без грешка. Но ако работи на Scite, ще доведе до грешка. Това определено е Scite грешка. Работи на C & Lua, но се проваля с Python3.   -  person dns    schedule 14.12.2018
comment
Каква е грешката, ако пропуснете този encode decode танц?   -  person deceze♦    schedule 14.12.2018
comment
Това е същата грешка. Traceback (most recent call last): File "test-requests.py", line 16, in <module> print("\u30c0\u30a4\u30b9\u30ad") File "D:\BIN\Python37\lib\encodings\cp1252.py", line 19, in encode return codecs.charmap_encode(input,self.errors,encoding_table)[0] UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-3: character maps to <undefined>   -  person dns    schedule 14.12.2018
comment
Така че опростете въпроса, като пропуснете encode decode, защото вероятно няма нищо общо с проблема. Проблемът е, че UTF-8 изходът не работи във вашата конкретна среда, нека се съсредоточим върху тази среда.   -  person deceze♦    schedule 14.12.2018
comment
Редактирали сте въпроса си, моля, уверете се, че все още е правилен.   -  person deceze♦    schedule 14.12.2018
comment
Добавих scite config към въпроса.   -  person dns    schedule 14.12.2018
comment
SciTE смята, че кодирането на stdout е cp1252. Сигурни ли сте, че конфигурирате SciTE правилно за UTF-8?   -  person Mark Tolonen    schedule 14.12.2018
comment
@MarkTolonen: Вече промених на code.page=65001, но все още получавам същото съобщение за грешка. Мога да отпечатам други уникод знаци освен японски/китайски.   -  person dns    schedule 15.12.2018
comment
Съобщението за грешка все още казва encodings\cp1252.py, така че смята, че това е кодирането на stdout.   -  person Mark Tolonen    schedule 15.12.2018
comment
Според scintilla.org/SciTEDoc.html има и параметър output.code.page. Това зададено и отменя ли code.page?   -  person Mark Tolonen    schedule 15.12.2018
comment
Зададох output.code.page, но пак връщам същата грешка. Току-що инсталирах стария Python 2.7 и той работи добре със Scite & Unicode. Само Python 3.7 (C/J/K/арабски символ) не работи със Scite. Много е странно.   -  person dns    schedule 15.12.2018


Отговори (2)


Scite включва popen() / прехвърляне на STDOUT.

Python 3.7 се нуждае от env променлива "PYTHONIOENCODING", която да бъде зададена ръчно. Така че трябва да добавите променлива на средата "PYTHONIOENCODING", зададена на "utf_8"

въведете описание на изображението тук

Резултат:

въведете описание на изображението тук

person dns    schedule 02.01.2019

Опитайте да направите това:

print(u'ダイスキ')
person Carlos Herrera    schedule 14.12.2018