Od ?Quotes
:Jaka jest różnica między kodami szesnastkowymi ( x) i unicode ( u)?
\xnn character with given hex code (1 or 2 hex digits) \unnnn Unicode character with given code (1--4 hex digits)
W przypadku gdy znak Unicode ma tylko jedną lub dwie cyfry, spodziewam te znaki mają być takie same. W rzeczywistości, jeden z przykładów na stronie ?Quotes
pomocy pokazuje:
"\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!"
Jednak pod Linuksem, gdy próbuje wydrukować znak funta, widzę
cat("\ua3")
## £
cat("\xa3")
## �
Oznacza to, że kod \x
sześciokątną nie wyświetla się poprawnie. (To zachowanie występowało w każdym locale, które próbowałem.) W Windows 7 obie wersje pokazują znak funta.
Jeśli skonwertuję na liczbę całkowitą i wstecz, wówczas znak funta wyświetla się poprawnie pod Linuksem.
cat(intToUtf8(utf8ToInt("\xa3")))
## £
Nawiasem mówiąc, to nie działa w systemie Windows, ponieważ utf8ToInt("\xa3")
zwrotów NA
.
Niektóre znaki \x
zwracają NA
w systemie Windows, ale wyświetlają błąd w systemie Linux. Na przykład:
utf8ToInt("\xf0")
## Error in utf8ToInt("\xf0") : invalid UTF-8 string
("\uf0"
to ważny znak.)
Te przykłady pokazują, że istnieją pewne różnice pomiędzy \x
i \u
form znaków, które wydają się być OS-specyficzny, ale mogę” t zobacz jakąkolwiek logikę, w jaki sposób są zdefiniowane.
Jaka jest różnica między tymi dwoma postaciami?
To C#, ale może pomóc, ponieważ jest to samo pytanie: http://stackoverflow.com/questions/32175482/what-is-the-difference-between-using -u-and-x-while-represent-character-lite – etienne
@etienne Nie zdziwiłbym się, gdyby krótka była szczegółowa odpowiedź wiki od Richiego. –
@DavidArenburg: nah, właśnie napisał to pytanie, więc musi być zaskoczony. :) –