Os caracteres M-BM-
são uma representação ASCII da sequência de bytes 0xc2 0xa0
, que é a codificação UTF8 do caractere unicode A0
- um caractere de espaço sem quebra. Este caractere pode ser inserido nos documentos do LibreOffice e do Microsoft Word usando a seqüência de teclas Ctrl + Deslocamento + ESPAÇO .
Por exemplo, se criarmos um novo documento .odt no LibreOffice e digitar ABC Ctrl + Deslocar + ESPAÇO DEF, então Save As... Text
(ignorando o aviso de que o documento pode conter recursos que não podem ser salvos nesse formato), então visualize o arquivo .txt resultante com cat
:
$ cat nbsp.txt
ABC DEF
e novamente com a opção -v
para mostrar caracteres não imprimíveis
$ cat -v nbsp.txt
M-oM-;M-?ABCM-BM- DEF
Tenha em atenção que também obtemos uma sequência inicial M-oM-;M-?
ou hexadecimal 0xef 0xbb 0xbf
, que é a UTF8 marca de encomenda de bytes (BOM) consistente com o tipo de arquivo informado pelo comando file
, por exemplo
$ file nbsp.txt
nbsp.txt: UTF-8 Unicode (with BOM) text
Usando od
para imprimir os valores hexadecimais em ordem de bytes,
$ od -tx1 nbsp.txt
0000000 ef bb bf 41 42 43 c2 a0 44 45 46 0a
0000014
É possível manipular esses caracteres usando ferramentas padrão como sed
ou tr
, especificando os códigos hexadecimais como sequências de escape, por exemplo. para substituir o espaço sem quebra por um espaço ASCII simples
$ sed 's/\xc2\xa0/ /g' nbsp.txt
ABC DEF
Verificar novamente com od
confirma a substituição por um espaço ASCII comum 0x20 (decimal 32)
$ sed 's/\xc2\xa0/ /g' nbsp.txt | od -tx1
0000000 ef bb bf 41 42 43 20 44 45 46 0a
0000013
No gnome-terminal (e talvez outros emuladores de terminal compatíveis com UTF8), também é possível inserir o valor do ponto de código unicode diretamente usando a seqüência de teclas Ctrl + < kbd> Shift + u seguido por um valor hexadecimal e depois pela tecla Enter - a sequência aparece inicialmente como u̲.̲.̲.̲ mas depois o caractere deve compor quando você apertar Enter eg para a mesma substituição de espaço sem quebra que podemos fazer
$ sed 's/Ctrl+Shift+ua0
exibido como
$ sed 's/̲/̲u̲a̲0̲
e, em seguida, conclui como
$ sed 's/ / /g' nbsp.txt
ABC DEF
Usando cat -v
, podemos confirmar que a sequência M-BM-
se tornou um espaço comum
$ sed 's/ / /g' nbsp.txt | cat -v
M-oM-;M-?ABC DEF
Você pode querer ver conversores de codificação mais genéricos como iconv e uconv também.