Corrige erro de Unicode surrogate em migração de PDFs#818
Draft
Corrige erro de Unicode surrogate em migração de PDFs#818
Conversation
…ish() Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Fix interruption in article processing due to PDF names
Corrige erro de Unicode surrogate em migração de PDFs
Feb 3, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O que esse PR faz?
Corrige
DataError: Unicode low surrogate must follow a high surrogateque interrompe completamente a migração de fascículos quando PDFs têm caracteres especiais nos nomes (ex: "Sumário.pdf").Python lê esses nomes com surrogates de escape (
\udce1). PostgreSQL rejeita surrogates ao salvar JSON. Solução: sanitiza surrogates antes de persistir no banco.Arquivos modificados:
core/utils/string_utils.py- Nova funçãosanitize_unicode_surrogates()que limpa surrogates recursivamente em estruturas aninhadasproc/models.py-Operation.finish()agora sanitizadetailantes de salvarcore/utils/test_string_utils.py- Testes cobrindo casos reais de falhaOnde a revisão poderia começar?
core/utils/string_utils.py- Lógica de sanitizaçãoproc/models.pylinha 31, 172-174 - Aplicação da sanitizaçãocore/utils/test_string_utils.py- Casos de testeComo este poderia ser testado manualmente?
task_migrate_and_publish_articles_by_issuecompleta sem interrupçãoAlternativamente:
python /tmp/test_sanitize.pypara testes unitários.Algum cenário de contexto que queira dar?
Criticidade: 🔴 Bloqueia migração de múltiplos fascículos da coleção PSI
Root cause: Site clássico contém PDFs com nomes fora da norma (
ls -lahmostra'Sum'$'\341''rio.pdf'). Python 3 usasurrogateescapeao ler filesystem, gerando strings com surrogates inválidos.Trade-off: Nomes nos logs aparecem como "Sum?rio.pdf" em vez de "Sumário.pdf", mas mantém rastreabilidade e permite migração continuar.
Recomendação futura: Padronizar nomes de arquivos no site clássico.
Screenshots
N/A - Correção backend sem interface visual
Quais são tickets relevantes?
Issue #[número será linkado automaticamente pelo sistema]
Referências
Original prompt
This section details on the original issue you should resolve
<issue_title>Interrupção no processamento de fascículo devido à nomes de PDFs: django.db.utils.DataError: Unicode low surrogate must follow a high surrogate</issue_title>
<issue_description>### Descrição do problema
Ao executar a tarefa
migrate_and_publish_articlespara revistas da coleção PSI, alguns fascículos não foram processados porque a subtarefaproc.tasks.task_migrate_and_publish_articles_by_issuefoi interrompida, registrando o seguinte erro:Listando os arquivos no diretório
bases/pdfdo site clássico, há arquivos com nomes fora da norma, com caracteres especiais.Passos para reproduzir o problema
migrate_and_publish_articlespara um fascículo de um periódico que tenha um PDF dentro do diretório de PDFs do site clássico com o nome contendo caracteres especiais. Ex: "Sumário.pdf"proc.tasks.task_migrate_and_publish_articles_by_issuepara o fascículo aparece na listaComportamento esperado
O erro não deveria ocorrer, a migração do fascículo inteiro não deveria ser interrompida.
Screenshots ou vídeos
Lista Task Tracker com os registros de tarefas interrompidas:
<img width="2956" height="888" alt="Image" src="https://github.com/user-attachments/assets/45db4479-0fcf-4f06-a751-530a8ae...
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.