Da ?Quotes
:Qual è la differenza tra codice esadecimale ( x) e unicode ( u) caratteri?
\xnn character with given hex code (1 or 2 hex digits) \unnnn Unicode character with given code (1--4 hex digits)
Nel caso in cui il carattere Unicode ha solo una o due cifre, mi aspetterei questi personaggi per essere lo stesso. In effetti, uno degli esempi nella pagina ?Quotes
aiuto 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!"
Tuttavia, sotto Linux, quando si tenta di stampare un cancelletto, vedo
cat("\ua3")
## £
cat("\xa3")
## �
Cioè, il codice \x
esadecimale non riesce a visualizzare correttamente. (Questo comportamento persisteva con qualsiasi locale che ho provato.) Sotto Windows 7 entrambe le versioni mostrano un cancelletto.
Se si converte in numero intero e indietro, il segno di cancelletto viene visualizzato correttamente sotto Linux.
cat(intToUtf8(utf8ToInt("\xa3")))
## £
Per inciso, questo non funziona sotto Windows, dal momento che i rendimenti utf8ToInt("\xa3")
NA
.
Alcuni caratteri \x
restituiscono NA
in Windows ma generano un errore sotto Linux. Per esempio:
utf8ToInt("\xf0")
## Error in utf8ToInt("\xf0") : invalid UTF-8 string
("\uf0"
è un carattere valido.)
Questi esempi mostrano che ci sono alcune differenze tra \x
e \u
forme di personaggi, che sembrano essere specifici-OS, ma posso' Non vedo alcuna logica nel modo in cui sono definiti.
Quali sono le differenze tra queste due forme di carattere?
Questo è C#, ma può aiutare in quanto è la stessa domanda: http://stackoverflow.com/questions/32175482/what-is-the-difference-between-using -u-e-x-while-represent-character-lite – etienne
@etienne Non sarei sorpreso se una risposta wiki dettagliata da parte dello stesso Richie seguirà in breve. –
@DavidArenburg: nah, ha appena twittato questa domanda, quindi deve essere perplesso. :) –