estevaofon / tradutor-de-legendas

Tradutor de legendas utilizando o tradutor do google

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Legendas corrompidas no windows

estevaofon opened this issue · comments

As legendas apresentam-se sem problemas no linux, porém no windows apresentam-se corrompidas.
c6b5f4e364a8131315597ae92a65ebaa

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.

A bateria de testes que você pediu rodada no windows

testes

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.