«Windows использует UTF-16 в качестве внутренней кодировки», что именно это означает? - PullRequest
2 голосов
/ 31 октября 2011

Извините, если вопрос глупый, он меня как-то смутил, предположим, у меня есть приложение (независимо от C, C ++, .NET или Java) на моей Windows XP, и это приложение будет получать данные с удаленной машины, данные содержат китайские иероглифы, теперь, если китайские иероглифы становятся ненужными, правильно ли говорить, что Windows не имеет ничего общего с этой проблемой? потому что Windows использует UTF-16 и может правильно обрабатывать китайские символы.

С другой стороны, предположим, что Windows использует ASCII в качестве своей внутренней кодировки, означает ли это, что любые приложения на ней никогда не смогут правильно отображать китайские символы?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 31 октября 2011

Ядро Windows NT использует UNICODE_STRING для многих (или это больше всего?) Именованных объектов (например, файлов).Кодировка UTF-16.

Многие из вызываемых API пользовательского режима предоставляют пары почти идентичных функций, где один в паре принимает строки Unicode, а другой - строки ANSI.Строковые версии ANSI в конечном итоге преобразуют имена из ANSI в Unicode.

Например, когда вы вызываете функцию fopen () C, которая принимает 8-битные имена файлов, отличные от Unicode, она вызывает CreateFileA() (ANSI), и это в конечном итоге вызывает NtCreateFile () , который принимает имена файлов Unicode.Один из параметров NtCreateFile (), структура OBJECT_ATTRIBUTES , содержит указатель на структуру UNICODE_STRING.

Если вы, с другой стороны, вызываете MSVC ++ _wfopen () функция, она достигнет NtCreateFile () через CreateFileW () (Unicode) без преобразования.

0 голосов
/ 31 октября 2011

Чтобы сохранить любой текст в памяти и отобразить его на экране, ОС должна обработать этот текст в кодировке с некоторым за кадром.Какая именно кодировка для вас не имеет значения.Он может обрабатывать его как ASCII в кодировке HTML для всех, кого вы знаете, при условии, что API принимают определенный текст и выводит правильные данные.

«Windows использует UTF-16 внутри» означает, что Windows хранит и обрабатывает текствнутренне как UTF-16.Он также поддерживает китайский текст.Эти две вещи не обязательно связаны.Да, внутреннее использование UTF-16 облегчает поддержку китайского языка, поэтому, вероятно, именно поэтому инженеры Windows решили использовать UTF-16.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...