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, так что я хотел бы кто-то, кто чувствует себя авторитетным отбивать в.
Я вижу вашу точку зрения. Я также предполагаю, что «строка Unicode» действительно означает кодировку UTF-16. –