В чем разница между шестнадцатеричным кодом (\ x) и символами юникода (\ u)?

От?Quotes:

\xnn   character with given hex code (1 or 2 hex digits)  
\unnnn Unicode character with given code (1--4 hex digits)

В случае, когда символ Unicode имеет только одну или две цифры, я ожидал бы, что эти символы будут одинаковыми. На самом деле, один из примеров на?Quotes страница справки показывает:

"\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!"

Однако под Linux, когда я пытаюсь напечатать знак фунта, я вижу

cat("\ua3")
## £
cat("\xa3")
## �

Это\x шестнадцатеричный код не отображается правильно. (Это поведение сохранялось для любой локали, которую я пробовал.) В Windows 7 обе версии показывают знак фунта.

Если я преобразую в целое число и обратно, тогда знак фунта будет отображаться правильно в Linux.

cat(intToUtf8(utf8ToInt("\xa3")))
## £

Кстати, это не работает под Windows, так какutf8ToInt("\xa3") возвращаетсяNA.

Немного\x символы возвращаютсяNA под виндой но выкинуть ошибку под линуксом. Например:

utf8ToInt("\xf0")
## Error in utf8ToInt("\xf0") : invalid UTF-8 string

("\uf0" является действительным символом.)

Эти примеры показывают, что между\x а также\u формы символов, которые кажутся специфичными для ОС, но я не вижу никакой логики в том, как они определены.

В чем разница между этими двумя символами?

Ответы на вопрос(1)

Ваш ответ на вопрос