|
|
|
Нуб. Не пойму как строки устроены.
|
|||
|---|---|---|---|
|
#18+
Читаю Хорстманна и Корнелла, как посоветовано в факе. Пытаюсь разобраться, как устроены строки, возникли непонятки. Написано, что дополнительные символы представлены двумя кодовыми единицами. Объявил сроку из одного символа. Код: java 1. (пока не прочитал, как char к строке приводить, так что мб написано коряво) Затем смотрю, что возвращает код: Код: java 1. 2. 3. 4. 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" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2013, 22:05:59 |
|
||
|
Нуб. Не пойму как строки устроены.
|
|||
|---|---|---|---|
|
#18+
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). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2013, 22:20:36 |
|
||
|
Нуб. Не пойму как строки устроены.
|
|||
|---|---|---|---|
|
#18+
стоп, понял. я же пытаюсь в два байта засунуть больше чем влазит. другие вопросы: 1. как задать строку из дополнительного символа? нужно две кодовых единицы сложить? 2. как понять, что в строке хотели показать один дополнительный символ а не два из основной плоскости? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2013, 22:21:46 |
|
||
|
Нуб. Не пойму как строки устроены.
|
|||
|---|---|---|---|
|
#18+
zbgстоп, понял. я же пытаюсь в два байта засунуть больше чем влазит. другие вопросы: 1. как задать строку из дополнительного символа? нужно две кодовых единицы сложить? 2. как понять, что в строке хотели показать один дополнительный символ а не два из основной плоскости? Честно говоря, не знаю зачем это вам. В практике это встречается крайне редко. Я бы начал смотреть отсюда: http://docs.oracle.com/javase/tutorial/i18n/text/supplementaryChars.html http://docs.oracle.com/javase/tutorial/i18n/text/usage.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2013, 22:28:58 |
|
||
|
Нуб. Не пойму как строки устроены.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, спасибо за ответы. Зачем - да просто разобраться хочу. Только начал читать про язык, а уже вопросы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2013, 22:36:28 |
|
||
|
Нуб. Не пойму как строки устроены.
|
|||
|---|---|---|---|
|
#18+
zbgBlazkowicz, спасибо за ответы. Зачем - да просто разобраться хочу. Только начал читать про язык, а уже вопросы... Работаю 7 год, ни разу не понадобились подобного рода знания:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2013, 22:44:14 |
|
||
|
Нуб. Не пойму как строки устроены.
|
|||
|---|---|---|---|
|
#18+
Юникод - очень запутанная вещь, если будете разбираться, то только мозг себе сломаете. Главное, что нужно знать о юникоде - следует любой ценой избегать его использования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2013, 00:02:14 |
|
||
|
Нуб. Не пойму как строки устроены.
|
|||
|---|---|---|---|
|
#18+
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)." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2013, 10:06:57 |
|
||
|
Нуб. Не пойму как строки устроены.
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪЮникод - очень запутанная вещь, если будете разбираться, то только мозг себе сломаете. Главное, что нужно знать о юникоде - следует любой ценой избегать его использования. Избегать не получится, так как в JVM строки всегда кодируются в Юникоде. И в первом приближении Юникод - очень простая вещь, кодировка 16 бит на символ. Для чтения и записи на/в файл есть встроенные перекодировщики для всех популярных кодировок, надо только их указываеть при открытии файла, а если не укажешь, возьмется по умолчанию, а на разных машинах умолчание разное, так что возможны неожиданности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2013, 15:26:08 |
|
||
|
Нуб. Не пойму как строки устроены.
|
|||
|---|---|---|---|
|
#18+
rfqИ в первом приближении Юникод - очень простая вещь, кодировка 16 бит на символ. До тех пор пока не понадобиться 32 бита. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2013, 15:41:05 |
|
||
|
Нуб. Не пойму как строки устроены.
|
|||
|---|---|---|---|
|
#18+
Йуный джавистЪЮникод - очень запутанная вещь, если будете разбираться, то только мозг себе сломаете. Главное, что нужно знать о юникоде - следует любой ценой избегать его использования. Ты безнадёжно отстал брадт. Современные платформенные языко-технологии Java./Net полностью перешли на использование Unicode для строковых и символьных типов. Однобайтовые строки существуют теперь в DBMS, внешних текстовых файлах и legacy-документах и legacy-software. И будучи оторванными от системы и регионально-территориальных настроек эти (бинарные) файлы теряют свой смысл и создают проблемы при попытке их прочитать или интерпретировать как текст. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2013, 17:18:03 |
|
||
|
Нуб. Не пойму как строки устроены.
|
|||
|---|---|---|---|
|
#18+
Ты безнадёжно отстал брадт. Современные платформенные языко-технологии Java./Net полностью перешли на использование Unicode для строковых и символьных типов. А PHP, например, не перешел. И будучи оторванными от системы и регионально-территориальных настроек эти (бинарные) файлы теряют свой смысл и создают проблемы при попытке их прочитать или интерпретировать как текст. Я думаю, если оторвать кириллический документ от системы и отправить его, например, в Бразилию, то его там никто не сможет проинтерпретировать как текст даже если закодировать юникодом. В Японии, кстати, Юникод вообще не используется. Зайдите на любой японский сайт - там будет кодировка shift_jis. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2013, 18:11:15 |
|
||
|
Нуб. Не пойму как строки устроены.
|
|||
|---|---|---|---|
|
#18+
Ох тыж, тут уже все написали. Вот эти две ссылки все прояснили. http://ru.wikipedia.org/wiki/UTF-16 http://stackoverflow.com/questions/8521226/what-java-function-offsetbycodepoints-really-takes-as-an-argument Учу жаву вечерами и ночами, тупанул. Спасибо всем, я разобрался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.04.2013, 19:55:39 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38230090&tid=2129518]: |
0ms |
get settings: |
13ms |
get forum list: |
22ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
44ms |
get topic data: |
17ms |
get forum data: |
4ms |
get page messages: |
84ms |
get tp. blocked users: |
3ms |
| others: | 314ms |
| total: | 513ms |

| 0 / 0 |
