AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 459778
Accepted
x-yuri
x-yuri
Asked: 2018-08-01 23:14:42 +0800 CST2018-08-01 23:14:42 +0800 CST 2018-08-01 23:14:42 +0800 CST

Como od trata os símbolos após `\x7f`?

  • 772

O comando a seguir passa para odsímbolos de \x00para \xff:

$ seq 0 255 | awk '{printf("%c", $0)}' | od -c

Mas o que eu recebo é:

0000000  \0 001 002 003 004 005 006  \a  \b  \t  \n  \v  \f  \r 016 017
0000020 020 021 022 023 024 025 026 027 030 031 032 033 034 035 036 037
0000040       !   "   #   $   %   &   '   (   )   *   +   ,   -   .   /
0000060   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?
0000100   @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
0000120   P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _
0000140   `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
0000160   p   q   r   s   t   u   v   w   x   y   z   {   |   }   ~ 177
0000200 302 200 302 201 302 202 302 203 302 204 302 205 302 206 302 207
0000220 302 210 302 211 302 212 302 213 302 214 302 215 302 216 302 217
0000240 302 220 302 221 302 222 302 223 302 224 302 225 302 226 302 227
0000260 302 230 302 231 302 232 302 233 302 234 302 235 302 236 302 237
0000300 302 240 302 241 302 242 302 243 302 244 302 245 302 246 302 247
0000320 302 250 302 251 302 252 302 253 302 254 302 255 302 256 302 257
0000340 302 260 302 261 302 262 302 263 302 264 302 265 302 266 302 267
0000360 302 270 302 271 302 272 302 273 302 274 302 275 302 276 302 277
0000400 303 200 303 201 303 202 303 203 303 204 303 205 303 206 303 207
0000420 303 210 303 211 303 212 303 213 303 214 303 215 303 216 303 217
0000440 303 220 303 221 303 222 303 223 303 224 303 225 303 226 303 227
0000460 303 230 303 231 303 232 303 233 303 234 303 235 303 236 303 237
0000500 303 240 303 241 303 242 303 243 303 244 303 245 303 246 303 247
0000520 303 250 303 251 303 252 303 253 303 254 303 255 303 256 303 257
0000540 303 260 303 261 303 262 303 263 303 264 303 265 303 266 303 267
0000560 303 270 303 271 303 272 303 273 303 274 303 275 303 276 303 277
0000600

O que há de errado com os personagens depois de \x7f?

od
  • 1 1 respostas
  • 619 Views

1 respostas

  • Voted
  1. Best Answer
    Stéphane Chazelas
    2018-08-02T01:45:52+08:002018-08-02T01:45:52+08:00

    Dependendo da awkimplementação, printf("%c", n)gera o valor do byte nou o caractere cujo ponto de código é n.

    Se o conjunto de caracteres da localidade for UTF-8 (consulte a saída de locale charmap), isso produzirá o mesmo resultado para valores de 0 a 127 (onde a codificação dos caracteres U+0000 a U+007f são os valores de byte 0 a 0x7f).

    Mas para qualquer coisa acima de 127, você obtém o valor de byte correspondente (truncado para 8 bits) para as awkimplementações na primeira categoria, ou a codificação UTF-8 para as outras (pelo menos GNU awk, provavelmente a que você está usando).

    gawk 'BEGIN{printf "%c", 8364}'
    

    (8364 sendo 0x20AC) imprime um €sinal Euro (U+20AC), codificado como 0xe2 0x82 0xac em UTF-8, enquanto

    mawk 'BEGIN{printf "%c", 8364}'
    

    imprime um byte 0xAC (que é a codificação de nenhum caractere em UTF-8, que é um texto inválido, seu terminal pode renderizá-lo como �, o caractere de substituição).

    Observe que o ponto de código aqui normalmente seria o ponto de código Unicode para conjuntos de caracteres de vários bytes e o valor do charset (portanto, valor de byte) para os de byte único. Em uma localidade usando o conjunto de caracteres iso8859-15, o sinal do Euro tem o ponto de código 0xA4 (não 0x20AC), printf("%c", 0xA4)imprimiria um sinal do Euro (valor do byte 0xA4) independentemente da awkimplementação.

    Portanto, se você deseja imprimir bytes por valor (valores de 1 a 255, nem todas as awkimplementações funcionarão corretamente para 0), use:

    LC_ALL=C awk 'BEGIN{printf "%c", value}'
    

    O charset da localidade C é garantido para ser de byte único e todo sistema tem uma localidade C.

    Você também pode usar:

    printf '\200'
    

    (aqui o valor do byte é expresso em octal). Algumas printfimplementações também suportam hexadecimal:

    printf '\x80'
    

    Algumas printfimplementações também suportam:

    printf '\u20ac'
    

    Para imprimir um caractere com base em seu ponto de código Unicode (geralmente no conjunto de caracteres da localidade (portanto, 0xA4 em localidades iso8859-15, 0xe2 0x82 0xac em UTF-8 e vários comportamentos diferentes em localidades onde o conjunto de caracteres não tem o sinal Euro ), embora alguns gostem printfdas ksh93saídas internas codificadas em UTF-8, independentemente do conjunto de caracteres da localidade).

    • 2

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve