Legendas corrompidas no windows
estevaofon opened this issue · comments
Não consegui reproduzir esses caracteres estranhos. Mas quando tentei no Windows deu uma exceção relacionada a caracteres. Mandei um PR corrigindo ela que taaalvez corrija essa questão de caracteres estranhos também.
Poderia testar a branch do PR e dar um feedback sobre essa questão antes de (possivelmente) dar merge? Mesmo que não corrija essa issue em questão, vai estar corrigindo uma exceção lançada e creio ser importante averiguar.
Marcell,
Valeu pela correção realmente corrige uns bugs da execução do script no windows. Mas ainda a legenda abre bagunçada no windows 7. A legenda aparece zuada assim tanto abrindo com bloco de notas, quanto com vim no windows. Mesmo estando bagunçada ela roda sem problema com o VLC, porém com o bsplayer o erro aparece.
Eu imagino que fica um pouco inviável de você poder ajudar sem ver os erros na máquina virtual. hehe
Mas sua ajuda já foi de muita valia e obrigado pela boa vontade!
Qual o output do python --version
do Windows? E qual a versão do Windows (e se, por exemplo, tem tradução instalada)? E, mais importante, qual o output disso no idle do Windows:
import sys
print(sys.stdout.encoding)
Verifica também a mesma propriedade das variáveis contextuais data
(dentro de cada with
do gtranslate.py):
print(data.encoding)
Se você der print
nas linhas antes de escrevê-las nos arquivos, os caracteres também estão esquisitos?
Também gostaria de ver os outputs dessa "bateria de testes":
import sys, locale, os
print(sys.stdout.encoding)
print(sys.stdout.isatty())
print(locale.getpreferredencoding())
print(sys.getfilesystemencoding())
print(os.environ["PYTHONIOENCODING"])
print(chr(246), chr(9786), chr(9787))
Consegui reproduzir a falha "online" aqui:
http://www.cafewebmaster.com/online_tools/utf_decode
Operation: Charset converter / iconv
From: ISO-8859-9
To: UTF-8
Input text: Se você escolheu essa vida, então você
O que gerou:
Output text: Se você escolheu essa vida, então você
Experimentando algumas coisas no Python, consegui "consertar" o conteúdo. No Python 3.5.3 ainda do meu Ubuntu:
line = 'Se você escolheu essa vida, então você'
fixed = line.encode('ISO-8859-9').decode('utf-8')
print(fixed)
A saída disso é:
Se você escolheu essa vida, então você
Poderia testar escrever nos arquivos da forma como fixed
está? Seria "interferir" alterando o conteúdo de line
ou de item
no escopo do segundo open
, antes de adicionar à formated_list
.
(Se não funcionar, tente remover o , encoding='utf-8'
que eu adicionei nos argumentos dos open
, tendo cuidado caso a exceção UnicodeEncodeError
volte a ser lançada.)
Opa, muito bom! Vou testar isso!
Substituindo essa linha:
without_backspace.append(line)
Por:
without_backspace.append(line.encode('ISO-8859-9').decode('utf-8'))
Eu obtenho o seguinte erro:
Traceback (most recent call last):
File "gtranslate.py", line 41, in
without_backspace.append(line.encode('ISO-8859-9').decode('utf-8'))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe1 in position 1: invalid continuation byte
Isso independente de colocar o encoding='utf-8' no open
Fiz novas investigações aqui. Ao abrir com bloco de notas não apresenta erro, porém abrindo com o vim mostra a legenda bagunçada. E ao abrir com o player bsplayer a legenda se apresenta bagunçada, já com o vlc não apresenta problema. Isso tem ocorrido independente de gerar a legenda com linux ou windows. Bem misterioso.
print(data.encoding)
Resulta em:
AttributeError: 'str' object has no attribute 'encoding'
Problema resolvido, mudando o enconding de escrita de utf-8 para utf-8-sig permitiu que os arquivos fossem corretamente lidos em todos os players. Ainda aparecem caracteres estranhos abrindo com o vim no windows, contudo eles podem ser ignorados, considerando que o programa já está funcionando corretamente.
Muito obrigado pela ajuda, Marcell!
Show!
Dica: quando for commitar algo que resolva a issue, se o nome do commit for algo como fix #1
ou close #1
o Github vai linkar o seu commit aqui e vai fechar o tópico automaticamente!
https://help.github.com/articles/closing-issues-using-keywords/
Muito massa, depois vou testar. Como essa solução é uma forçasão de barra, pois não é recomendado usar o utf-8-sig, vou deixar a issue aberta.