У меня есть плейлист YouTube, чьи названия содержат как корейские, так и латинские символы. Я могу распечатать названия видео в списке воспроизведения, используя команду ниже: < /p>
Код: Выделить всё
yt-dlp --flat-playlist -i --print title PLySOINx0fqvYr6s8aGdqaK9j8_CAWcP5U
< /code>
Я получаю следующий вывод: < /p>
WARNING: [youtube:tab] YouTube said: INFO - 1 unavailable video is hidden
Vague (feat. Hey)
새벽 한 시
천 개의 태양
Wish
나쁘게
[온스테이지] 11. 캐스커 - 향
캐스커 (Casker) - 고양이와 나 (Cat and Me)
고양이와 나 (Acoustic Version)
...
< /code>
(точки не части выхода) < /p>
Я использую стандартную терминал CMD Windows. Когда кодовая страница моего терминала установлена на 437 (по умолчанию) или 65001 (UTF-8), она отображает:
. Используя кодовую страницу 949, как корейские, так и латинские символы отображаются правильно, как указано выше. Для любой кодовой страницы символы отображаются правильно, когда вывод копируется в блокнот или где -либо еще. < /P>
Однако, когда я запускаю это: < /p>
yt-dlp --flat-playlist -i --print title PLySOINx0fqvYr6s8aGdqaK9j8_CAWcP5U > out.txt 2>&1
< /code>
Я получаю следующее out.txt: < /p>
WARNING: [youtube:tab] YouTube said: INFO - 1 unavailable video is hidden
Vague (feat. Hey)
Wish
[] 11. -
(Casker) - (Cat and Me)
(Acoustic Version)
...
и я могу подтвердить, что они действительно ушли. Осталось только пространства. Запуск приведенного ниже кода: < /p>
Код: Выделить всё
import subprocess
p = subprocess.run("yt-dlp --flat-playlist -i --print title PLySOINx0fqvYr6s8aGdqaK9j8_CAWcP5U".split(), capture_output=True, text=True, encoding='cp949')
print((p.stdout.p.stderr))
< /code>
Я получаю следующий вывод: < /p>
('Vague (feat. Hey)\n \n \nWish\n\n[] 11. - \n (Casker) - (Cat and Me)\n (Acoustic Version)\n - .mp4\nHidden Track\n (feat. Of My Aunt Mary)\n (Song By From Wanted)\nCasker - fragancia\nCasker () "Scent ()" [ ]\n \n (Casker) - \n (Casker) - Fragile Days\n\nSmall One\n (Casker) - Air Trip\nCasker - \nCasker - (Just This Much)\nP\n[Vietsub] - Casker - A thousand suns (Live in Viewzic Session)\n\n (Casker) - Hidden Track\n47\n47 (ver. 2)\nMocha\nPolyester Heart\n\ntender - (Casker)\n (feat. )\n\n\n \n (Casker) - 7 (The Ipanema Girl in July)\n NANJANG ; casker ; \n\n (Piano ver.)\n (Casker) - Midnight Moment\n (Casker) - Skip\nUndo\n[MV] (Casker) - (The Smiler)\n Toothbrush (Acoustic Version)\n1103 (feat. )\n \nNowhere\n \n (Casker) - (One Day) Pt. 2\n(Casker) - \n8 \nCasker - \n (Casker ) - Cactus\n', 'WARNING: [youtube:tab] YouTube said: INFO - 1 unavailable video is hidden\n')
< /code>
Используемая кодовая страница не имеет значения. < /p>
Что касается Python, я проверил все комбинации: < /p>
[*] Страница кода 437 против 65001 против 949 < /li>
/>os.environ=pythonioEncoding'ty=___
[*]sys.stdout.reconfigure(encoding=___)
subprocess.popen vs subprocess.run < /li>
hell = rely = rell = wrole /ret /ret /ret /ret /ret /ret /ret /ret /ret /ret /ret /ret /ret /ret /ret /ret /ret /ret /ret /ret /ret /ret /ret /rell hell. /> < /ul>
import subprocess
enc = "cp949"
import os
os.environ['PYTHONIOENCODING'] = enc
# import sys
# sys.stdout.reconfigure(encoding=enc)
# comm = "echo 철갑혹성"
comm = "yt-dlp --flat-playlist -i --print title PLySOINx0fqvYr6s8aGdqaK9j8_CAWcP5U"
# p = subprocess.Popen(comm, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, shell=True, encoding="utf-8")
# print(p.communicate())
p = subprocess.run(comm.split(), capture_output=True, text=True, shell=False, encoding=enc)
print((p.stdout, p.stderr))
Подробнее здесь: https://stackoverflow.com/questions/796 ... -of-yt-dlp