2016-11-19 1 views
1

JNI ссылается на «строки Unicode» и «символы Unicode» в ряде мест, где необходимо указать конкретную кодировку.Что означает документация JNI под символом «Unicode string»?

This страница с перечислением функций JNI описывает несколько функций как взятие или создание «символов Unicode». Например,

NewString

jstring NewString(JNIEnv *env, const jchar *unicodeChars, jsize len); 

Создает новый объект java.lang.String из массива символов Unicode.

Я искал JNI книгу для лучшего описания, но он оставил меня больше запутывается:

JNI поддерживает преобразование как и из Unicode и UTF-8 строк. Unicode строка представляет собой символы, как 16-разрядные значения [...]

Это описание меня смущает, потому что это говорит о том, что все символы будут закодированы в 16-бит, но это не достаточно для Unicode (и это также странно подразумевает, что Unicode и UTF-8 являются альтернативами). «UTF-16» не отображается в тексте Книги JNI. Может быть, документы JNI были написаны в более невинное время, когда на самом деле было только BMP и 16 бит?

Поскольку jchar - это 16 бит, я предполагаю, что «Юникод» здесь означает UTF-16, но я совсем не уверен.

Update: Я заметил, вики-страницу для UTF-16 говорит «Unicode» старый термин для того, что мы теперь знаем, как UCS-2. Однако он также говорит, что Java теперь использует UTF-16. Из того, что я до сих пор подозреваю, «Unicode» в документации JNI означает стандарт UTF-16, но я обычно не работают с JNI или даже Java, так что я хотел бы кто-то, кто чувствует себя авторитетным отбивать в.

+0

Я вижу вашу точку зрения. Я также предполагаю, что «строка Unicode» действительно означает кодировку UTF-16. –

ответ

3

Из того, что я до сих пор подозреваю, «Unicode» в документации JNI означает стандарт UTF-16, но я обычно не работают с JNI или даже Java, так что я хотел бы кто-то, кто чувствует себя авторитетным отбивать в.

Вот что это значит.

Книга JNI и спецификация JNI были написаны давно (1999) ... задолго до того, как использование кодовых точек вне BMP было обычным явлением.

(Unicode 2.0 был выпущен в 1996 году, и он расширил Unicode за 16 бит. Java принял Unicode 2.0 в JDK 1.1. Однако потребовалось бы некоторое время, прежде чем все в команде Sun Java перешли на использование нового, правильного терминология.)

+0

Спасибо. Приму. Кажется странным, хотя они не обновили терминологию в документации за все эти годы. – Praxeolitic

+0

Прохождение старых спецификаций и обновление терминологии дорого (во времена народов), и Sun/Oracle имеют лучшие дела. –