Como detectar caracteres UTF malformados

votos
10

Eu quero detectar e substituir malformados caracteres UTF-8 com espaço em branco usando um script Perl ao carregar os dados usando SQL * Loader. Como posso fazer isso?

Publicado 15/10/2008 em 10:57
fonte usuário
Em outras línguas...                            


3 respostas

votos
4

Considere Python. Ele permite estender codecs com manipuladores de erro definidas pelo usuário, para que possa substituir bytes undecodable com o que quiser.

import codecs
codecs.register_error('spacer', lambda ex: (u' ', ex.start + 1))
s = 'spam\xb0\xc0eggs\xd0bacon'.decode('utf8', 'spacer')
print s.encode('utf8')

Isto imprime:

spam  eggs bacon
Respondeu 15/10/2008 em 18:47
fonte usuário

votos
1

RFC 3629 descreve a estrutura de UTF-8 caracteres. Se você der uma olhada isso, você vai ver que é bastante simples de encontrar caracteres inválidos, e que o próximo limite de caracteres é sempre fácil de encontrar (que é um personagem <128, ou um dos "caráter long" começar marcadores, com os principais fragmentos de 110, 1110, ou 11110).

Mas BKB é provavelmente correto - a resposta mais fácil é deixar perl fazer isso por você, embora eu não tenho certeza do que Perl faz quando detecta a utf-8 errado com esse filtro em vigor.

Respondeu 15/10/2008 em 12:44
fonte usuário

votos
1

EDIT: (pouco afastado sobre SQL Loader como parece deixar de ser relevante.)

Um problema vai estar trabalhando fora o que conta como o "fim" de um malformado de caracteres UTF-8. É fácil dizer o que é ilegal, mas pode não ser óbvio onde o personagem legal próxima começa.

Respondeu 15/10/2008 em 11:07
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more