Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Нуб. Не пойму как строки устроены. / 13 сообщений из 13, страница 1 из 1
17.04.2013, 22:05:59
    #38230049
zbg
zbg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нуб. Не пойму как строки устроены.
Читаю Хорстманна и Корнелла, как посоветовано в факе. Пытаюсь разобраться, как устроены строки, возникли непонятки.

Написано, что дополнительные символы представлены двумя кодовыми единицами.

Объявил сроку из одного символа.

Код: java
1.
String num = "" + (char)65992;



(пока не прочитал, как char к строке приводить, так что мб написано коряво)

Затем смотрю, что возвращает код:

Код: java
1.
2.
3.
4.
	
System.out.println(Character.isSupplementaryCodePoint(65992));
System.out.println(num.length());
System.out.println(num.codePointAt(0));



1. true - тут понятно: символ дополнительный.
2. 1 - тут не понятно, если The length is equal to the number of Unicode code units in the string, то почему дополнительный символ состоит из одной кодовой точки?
3. 456 - а где мое 65992? почему вернулся остаток от деления на 65536?

Eclipse IDE for Java Developers Version: Indigo Service Release 2
java version "1.7.0_07"
...
Рейтинг: 0 / 0
17.04.2013, 22:20:36
    #38230065
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нуб. Не пойму как строки устроены.
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
авторchar: The char data type is a single 16-bit Unicode character. It has a minimum value of '' (or 0) and a maximum value of '￿' (or 65,535 inclusive).
...
Рейтинг: 0 / 0
17.04.2013, 22:21:46
    #38230067
zbg
zbg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нуб. Не пойму как строки устроены.
стоп, понял. я же пытаюсь в два байта засунуть больше чем влазит.

другие вопросы:

1. как задать строку из дополнительного символа? нужно две кодовых единицы сложить?
2. как понять, что в строке хотели показать один дополнительный символ а не два из основной плоскости?
...
Рейтинг: 0 / 0
17.04.2013, 22:28:58
    #38230077
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нуб. Не пойму как строки устроены.
zbgстоп, понял. я же пытаюсь в два байта засунуть больше чем влазит.

другие вопросы:

1. как задать строку из дополнительного символа? нужно две кодовых единицы сложить?
2. как понять, что в строке хотели показать один дополнительный символ а не два из основной плоскости?
Честно говоря, не знаю зачем это вам. В практике это встречается крайне редко.
Я бы начал смотреть отсюда:
http://docs.oracle.com/javase/tutorial/i18n/text/supplementaryChars.html
http://docs.oracle.com/javase/tutorial/i18n/text/usage.html
...
Рейтинг: 0 / 0
17.04.2013, 22:36:28
    #38230086
zbg
zbg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нуб. Не пойму как строки устроены.
Blazkowicz, спасибо за ответы. Зачем - да просто разобраться хочу. Только начал читать про язык, а уже вопросы...
...
Рейтинг: 0 / 0
17.04.2013, 22:44:14
    #38230090
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нуб. Не пойму как строки устроены.
zbgBlazkowicz, спасибо за ответы. Зачем - да просто разобраться хочу. Только начал читать про язык, а уже вопросы...
Работаю 7 год, ни разу не понадобились подобного рода знания:)
...
Рейтинг: 0 / 0
18.04.2013, 00:02:14
    #38230130
Йуный джавистЪ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нуб. Не пойму как строки устроены.
Юникод - очень запутанная вещь, если будете разбираться, то только мозг себе сломаете. Главное, что нужно знать о юникоде - следует любой ценой избегать его использования.
...
Рейтинг: 0 / 0
18.04.2013, 10:06:57
    #38230313
maxkar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нуб. Не пойму как строки устроены.
zbg1. как задать строку из дополнительного символа? нужно две кодовых единицы сложить?
Да, нужно записывать два символа. Либо через unicode escapes: "\uD800\uDC00", либо через контактенацию пары символов, либо через StringBuilder.appendCodePoint. Последнее может оказаться удобнее всего, так как не нужно вручную переводить один символ в два.

2. как понять, что в строке хотели показать один дополнительный символ а не два из основной плоскости?
Нужно считать, что если идет "high surrogate;low surrogate;", то это всегда дополнительный символ. В основной плоскости эти диапазоны отведены под high/low surrogate и не имеют (по крайней мере, не должны) печатных символов.

Например, в wikibooks : "Unicode and ISO/IEC 10646 do not assign actual characters to any of the code points in the D800–DFFF range — these code points only have meaning when used in surrogate pairs. Hence an individual code point from a surrogate pair does not represent a character, is invalid unless used in a surrogate pair, and is unconditionally invalid in UTF-32 and UTF-8 (if strict conformance to the standard is applied)."
...
Рейтинг: 0 / 0
18.04.2013, 15:26:08
    #38231027
rfq
rfq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нуб. Не пойму как строки устроены.
Йуный джавистЪЮникод - очень запутанная вещь, если будете разбираться, то только мозг себе сломаете. Главное, что нужно знать о юникоде - следует любой ценой избегать его использования.
Избегать не получится, так как в JVM строки всегда кодируются в Юникоде. И в первом приближении Юникод - очень простая вещь, кодировка 16 бит на символ. Для чтения и записи на/в файл есть встроенные перекодировщики для всех популярных кодировок, надо только их указываеть при открытии файла, а если не укажешь, возьмется по умолчанию, а на разных машинах умолчание разное, так что возможны неожиданности.
...
Рейтинг: 0 / 0
18.04.2013, 15:41:05
    #38231070
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нуб. Не пойму как строки устроены.
rfqИ в первом приближении Юникод - очень простая вещь, кодировка 16 бит на символ.
До тех пор пока не понадобиться 32 бита.
...
Рейтинг: 0 / 0
18.04.2013, 17:18:03
    #38231340
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нуб. Не пойму как строки устроены.
Йуный джавистЪЮникод - очень запутанная вещь, если будете разбираться, то только мозг себе сломаете. Главное, что нужно знать о юникоде - следует любой ценой избегать его использования.
Ты безнадёжно отстал брадт. Современные платформенные языко-технологии Java./Net
полностью перешли на использование Unicode для строковых и символьных типов.

Однобайтовые строки существуют теперь в DBMS, внешних текстовых файлах и legacy-документах
и legacy-software. И будучи оторванными от системы и регионально-территориальных настроек
эти (бинарные) файлы теряют свой смысл и создают проблемы при попытке их прочитать
или интерпретировать как текст.
...
Рейтинг: 0 / 0
18.04.2013, 18:11:15
    #38231465
Йуный джавистЪ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нуб. Не пойму как строки устроены.
Ты безнадёжно отстал брадт. Современные платформенные языко-технологии Java./Net
полностью перешли на использование Unicode для строковых и символьных типов.

А PHP, например, не перешел.
И будучи оторванными от системы и регионально-территориальных настроек
эти (бинарные) файлы теряют свой смысл и создают проблемы при попытке их прочитать
или интерпретировать как текст.

Я думаю, если оторвать кириллический документ от системы и отправить его, например, в Бразилию, то его там никто не сможет проинтерпретировать как текст даже если закодировать юникодом.
В Японии, кстати, Юникод вообще не используется. Зайдите на любой японский сайт - там будет кодировка shift_jis.
...
Рейтинг: 0 / 0
18.04.2013, 19:55:39
    #38231608
zbg
zbg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нуб. Не пойму как строки устроены.
Ох тыж, тут уже все написали.

Вот эти две ссылки все прояснили.

http://ru.wikipedia.org/wiki/UTF-16
http://stackoverflow.com/questions/8521226/what-java-function-offsetbycodepoints-really-takes-as-an-argument

Учу жаву вечерами и ночами, тупанул.

Спасибо всем, я разобрался.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Нуб. Не пойму как строки устроены. / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]