Я получаю китайские символы в выходных данных curl
и затем подаю их в качестве входных данных для скрипта Python, но я получаю два совершенно разных поведения в зависимости от того, как я обрабатываю символы.
Метод, который я предпочитаю, дает мне UnicodeEncodeError.
Предпочтительный метод:
read -r C < <(curl ...)
python3 -c "import sys, urllib.parse; \
urllib.parse.quote(sys.argv[1])" "$C"
# UnicodeEncodeError: 'utf-8' codec can't encode character '\udce5' in position 0: surrogates not allowed
Альтернативный метод:
curl ... > tmp.txt
python3 -c "import urllib.parse; \
with open('tmp.txt', encoding='utf-8') as f: \
print(urllib.parse.quote(f.read()))"
# Outputs %E5%85%89%0A
Что я могу сделать, чтобы первый метод, который использует переменную bash, работал? Когда я echo $C
или cat tmp.txt
, китайский символ печатается правильно на моем терминале.
Когда я запускаю locale
на моей машине, я получаю:
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
EDIT
Моя среда - гренки (на ChromeOS). Мой удар - GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
.