Converte um arquivo ASCII com octal escapes para códigos UTF-8 para UTF-8

6
  1. Eu tenho um arquivo de texto que é um arquivo ASCII em si, mas contém seqüências de escape octal representando códigos em utf-8:

    07252066
    

    Existe algum programa ou comando que pode converter tal arquivo ASCII para um arquivo de texto realmente codificado em utf-8?

  2. A propósito, este site é "Online ASCII (Unicode Escaped) para     Ferramenta de conversão Unicode (UTF-8) "e este site é" Online Unicode (UTF-8) para ASCII (Ferramenta de conversão Unicode Escaped) ". Eles fazer a conversão na minha pergunta? Se não, que tipos de conversão eles fazem?
por Tim 16.07.2015 / 01:11

5 respostas

8

Se você tiver essas seqüências de escape em uma variável de shell, em dash, mksh ou bash:

printf %b "$string_with_backslash_escapes"

Este não é POSIX: o especificador %b é POSIX, mas requer 0 após cada barra invertida. Isso também interpreta outras saídas de contrabarra: \n como uma nova linha, \t como uma guia, etc.

Aqui está um perl one-liner que converte apenas seqüências de escape octal.

perl -pe 's[\(?:([0-7]{1,3})|(.))] [defined($1) ? chr(oct($1)) : $2]eg'

link interpreta valores octal como caracteres latinos-1, não sei por que Unicode e UTF-8 são mencionados na página. Não tenho ideia do que o link faz.

    
por 16.07.2015 / 03:31
4

Usando apenas Bash :

3.1.2.4 ANSI-C Quoting

Words of the form $'string' are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows:

\nnn the eight-bit character whose value is the octal value nnn (one to three digits)

Demonstração em um terminal UTF-8:

$ echo $'07252066'
自动?

O último caractere é exibido como um ponto de interrogação porque a sequência está malformada: apenas dois dos três bytes necessários estão presentes.

O site para o qual você fez o link RFC 5137 codifica / decodifica.

Se você inserir \u81ea\u52a8 na área de texto "ASCII (Unicode Escaped)", obterá 自动 como saída, porque é Caractere Unicode U + 81EA (cuja representação UTF-8 é e8 87 aa em hexadecimal, ou 350 207 252 em octal) e é caractere Unicode U + 52A8 (cuja representação UTF-8 é e5 8a a8 em hexadecimal, ou 345 212 250 em octal ).

    
por 16.07.2015 / 08:10
3

O Python no shell interativo pode fazer pelo menos parte disso. Mas a seqüência acima parece estar corrompida:

wilmer@ruby:~$ python
Python 2.7.10 (default, Jul  1 2015, 10:54:53) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> unicode("07252066", "utf-8")
Traceback (most recent call last):
  File "", line 1, in 
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 6-7: unexpected end of data
>>> unicode("072520", "utf-8")
u'\u81ea\u52a8'
>>> print unicode("072520", "utf-8")
自动
    
por 16.07.2015 / 01:19
-1

A maneira mais simples é ascii2uni -a K , por exemplo:

cat escaped.txt | ascii2uni -a K > unescaped.txt
    
por 10.09.2016 / 14:45
-1

Eu quero acrescentar que com algum software pode ser suficiente apenas selecionar, copiar, colar o texto que escapou. Por exemplo, o Wireshark mostra o texto UTF-8 como uma seqüência de bytes com escape octal, mas quando você copia & cole-o no Gedit, você recebe um texto normal, por exemplo \ 341 \ 203 \ 231 torna-se კ.

    
por 15.02.2018 / 15:59