codepage для произвольной строки
От: Head Ache  
Дата: 21.04.11 04:55
Оценка:
Добрый день, если баян, прошу тыкнуть пальцем.
Как для строки в unicode определить,
какая у нее кодовая страница для перевода в однобайтовую строку,
или это невозможно (в тексте есть несовместимые на одной codepage символы).
Экзотические языки мало интересуют, хотя неплохо бы иметь общее решение.
Может быть, в open source где-то есть готовые формулы?
Этот аккаунт покинут.
Re: codepage для произвольной строки
От: uzhas Ниоткуда  
Дата: 21.04.11 05:41
Оценка:
Здравствуйте, Head Ache, Вы писали:

HA>Как для строки в unicode определить,

HA>какая у нее кодовая страница для перевода в однобайтовую строку,
уточните свой вопрос, желательно с примерами
обычно unicode передают в utf8\utf16\utf32 формате, далее смотрят на возможности консоли и под нее в конкретную codepage конвертируют исходный текст
то бишь в unicode строке нет codepage или я чего-то не допонимаю
может, вам нужно для однобайтной строки узнать в какой она codepage ? некую угадалку нужно типа http://www.online-decoder.com/ru ?
Re: codepage для произвольной строки
От: ZegSoft Россия  
Дата: 21.04.11 15:50
Оценка:
Здравствуйте, Head Ache, Вы писали:

HA>Добрый день, если баян, прошу тыкнуть пальцем.

HA>Как для строки в unicode определить,
HA>какая у нее кодовая страница для перевода в однобайтовую строку,
HA>или это невозможно (в тексте есть несовместимые на одной codepage символы).
HA>Экзотические языки мало интересуют, хотя неплохо бы иметь общее решение.
HA>Может быть, в open source где-то есть готовые формулы?


Зачем юникоду codepage? Юникод сразу поддерживает все наиболее распространенные языки мира, на то он и юникод. А codepage нужен для простых строк, когда одним и тем же кодом кодируются различные буквы различных алфавитов.
Re: codepage для произвольной строки
От: c-smile Канада http://terrainformatica.com
Дата: 21.04.11 16:12
Оценка:
Здравствуйте, Head Ache, Вы писали:

HA>Добрый день, если баян, прошу тыкнуть пальцем.

HA>Как для строки в unicode определить,
HA>какая у нее кодовая страница для перевода в однобайтовую строку,
HA>или это невозможно (в тексте есть несовместимые на одной codepage символы).

По поводу последнего... это в принципе возможно как-то так:

typedef uint32 unicodecp;

unicodecp mincp = 0;
unicodecp maxcp = uint32(-1);

for(unicodecp ucp; str(ucp); )
{
  if( ucp > 127 )
  {
    mincp = max(mincp,ucp);
    maxcp = min(maxcp,ucp);
  }
}

if( maxcp - mincp  > 127)
  return more_than_two_codepages;

return ok_to_convert;


Скажем если строка содержит только ascii + кириллицу то получим
ok_to_convert. И можем использовать скажем KOI8-R или KOI8-U или Windows CP1251.

В случае ok_to_convert имея на руках [mincp .. maxcp] range и скажем вот это:
http://www.ssec.wisc.edu/~tomw/java/unicode.html
можем примерно прикинуть язык строки. А вот какую однобайтовую кодировку при этом использовать это уже отдельный вопрос.
Re[2]: codepage для произвольной строки
От: zaufi Земля  
Дата: 21.04.11 16:17
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>можем примерно прикинуть *язык* строки. А вот какую однобайтовую кодировку при этом использовать это уже отдельный вопрос.

поправочка: unicode оперирует не языками, но script'ами... feel the difference что называется...
Re[3]: codepage для произвольной строки
От: c-smile Канада http://terrainformatica.com
Дата: 21.04.11 16:40
Оценка:
Здравствуйте, zaufi, Вы писали:

CS>>можем примерно прикинуть *язык* строки. А вот какую однобайтовую кодировку при этом использовать это уже отдельный вопрос.

Z>поправочка: unicode оперирует не языками, но script'ами... feel the difference что называется...

Технически — да, скриптами. Я просто не уверен что ближе к этой сущности в русском: язык, скрипт или какое-нибудь "начертание".
Я думаю вопрошающий понял что имеется ввиду.
Re[2]: codepage для произвольной строки
От: Head Ache  
Дата: 21.04.11 23:31
Оценка:
Здравствуйте, uzhas, Вы писали:

U>Здравствуйте, Head Ache, Вы писали:


HA>>Как для строки в unicode определить,

HA>>какая у нее кодовая страница для перевода в однобайтовую строку,
U>уточните свой вопрос, желательно с примерами

например, вставляют некий текст на unicode в сообщение.
Требуется определить, можно ли передать его как однобайтовую строку или нет.
Если нельзя, это будет, например, utf-8 в base64, если можно, будет кодировка "8bit text" с указанием codepage.
То есть, зачем нужно: или иметь непреобразованный текст с возможностью просмотра,
либо без такой возможности и длиннее в 2.6 раз.
У меня есть основания ждать, что кодовые страницы могут быть только ANSI.
OEM, KOI-8 и им подобные исключены вследствие особенностей софта для создания текста сообщения.
Можно, конечно, перебрать в цикле все возможные кодовые страницы,
но эффективнее проверять "unicode ranges" и здесь непонятно, будет ли это однозначно.
Этот аккаунт покинут.
Re[2]: codepage для произвольной строки
От: Head Ache  
Дата: 21.04.11 23:41
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, Head Ache, Вы писали:


HA>>Добрый день, если баян, прошу тыкнуть пальцем.

HA>>Как для строки в unicode определить,
HA>>какая у нее кодовая страница для перевода в однобайтовую строку,
HA>>или это невозможно (в тексте есть несовместимые на одной codepage символы).

CS>if( maxcp — mincp > 127)

CS> return more_than_two_codepages;

а это всегда правильно хотя бы для ANSI 125x ?
как-то сомневаюсь.
Этот аккаунт покинут.
Re[3]: codepage для произвольной строки
От: uzhas Ниоткуда  
Дата: 22.04.11 05:23
Оценка:
Здравствуйте, Head Ache, Вы писали:

спасибо за уточнение
HA>например, вставляют некий текст на unicode в сообщение.
HA>Требуется определить, можно ли передать его как однобайтовую строку или нет.
давайте попробуйте четко сформулировать что вы понимаете под однобайтовой строкой. мне кажется, что любой utf8 текст является однобайтовой строкой

HA>Если нельзя, это будет, например, utf-8 в base64, если можно, будет кодировка "8bit text" с указанием codepage.

HA>То есть, зачем нужно: или иметь непреобразованный текст с возможностью просмотра,
HA>либо без такой возможности и длиннее в 2.6 раз.
"с возможностью просмотра" в какой кодовой странице? вам по барабану в какой именно?
что за магическое число 2.6 ? при base64 кодировании сообщение увеличивается на ~30 процентов

будет отлично, если вы еще больше расскажете про задачу. вы упомянули base64, для чего вы его применяете? вы текст пытаетесь в xml засунуть? в таком случае неважно читается она или нет, xml — просто транспорт, а правила засовывания строк в xml вполне четко определены и об этом в инете можно почитать
подозреваю, что вы оптимизируете пересылку текста (base64 неэффективен из-за раздувания текста) через какой-то транспорт
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.