Qual é a diferença entre caracteres hexadecimais (\ x) e unicode (\ u)?
De?Quotes
:
\xnn character with given hex code (1 or 2 hex digits)
\unnnn Unicode character with given code (1--4 hex digits)
No caso em que o caractere Unicode possui apenas um ou dois dígitos, eu esperaria que esses caracteres fossem iguais. De fato, um dos exemplos no?Quotes
a página de ajuda mostra:
"\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21"
## [1] "Hello World!"
"\u48\u65\u6c\u6c\u6f\u20\u57\u6f\u72\u6c\u64\u21"
## [1] "Hello World!"
No entanto, no Linux, ao tentar imprimir um sinal de libra, vejo
cat("\ua3")
## £
cat("\xa3")
## �
Ou seja, o\x
código hexadecimal falha ao exibir corretamente. (Esse comportamento persistiu com qualquer local que eu tentei.) No Windows 7, ambas as versões mostram um sinal de libra.
Se eu converter para número inteiro e voltar, o sinal de libra será exibido corretamente no Linux.
cat(intToUtf8(utf8ToInt("\xa3")))
## £
Aliás, isso não funciona no Windows, poisutf8ToInt("\xa3")
retornaNA
.
Alguns\x
caracteres retornamNA
no Windows, mas gere um erro no Linux. Por exemplo:
utf8ToInt("\xf0")
## Error in utf8ToInt("\xf0") : invalid UTF-8 string
("\uf0"
é um caractere válido.)
Esses exemplos mostram que existem algumas diferenças entre\x
e\u
formas de caracteres, que parecem ser específicas do sistema operacional, mas não consigo ver nenhuma lógica em como elas são definidas.
Qual é a diferença entre essas duas formas de caracteres?