Добрый день, если баян, прошу тыкнуть пальцем.
Как для строки в unicode определить,
какая у нее кодовая страница для перевода в однобайтовую строку,
или это невозможно (в тексте есть несовместимые на одной codepage символы).
Экзотические языки мало интересуют, хотя неплохо бы иметь общее решение.
Может быть, в open source где-то есть готовые формулы?
Здравствуйте, Head Ache, Вы писали:
HA>Как для строки в unicode определить, HA>какая у нее кодовая страница для перевода в однобайтовую строку,
уточните свой вопрос, желательно с примерами
обычно unicode передают в utf8\utf16\utf32 формате, далее смотрят на возможности консоли и под нее в конкретную codepage конвертируют исходный текст
то бишь в unicode строке нет codepage или я чего-то не допонимаю
может, вам нужно для однобайтной строки узнать в какой она codepage ? некую угадалку нужно типа http://www.online-decoder.com/ru ?
Здравствуйте, Head Ache, Вы писали:
HA>Добрый день, если баян, прошу тыкнуть пальцем. HA>Как для строки в unicode определить, HA>какая у нее кодовая страница для перевода в однобайтовую строку, HA>или это невозможно (в тексте есть несовместимые на одной codepage символы). HA>Экзотические языки мало интересуют, хотя неплохо бы иметь общее решение. HA>Может быть, в open source где-то есть готовые формулы?
Зачем юникоду codepage? Юникод сразу поддерживает все наиболее распространенные языки мира, на то он и юникод. А codepage нужен для простых строк, когда одним и тем же кодом кодируются различные буквы различных алфавитов.
Здравствуйте, Head Ache, Вы писали:
HA>Добрый день, если баян, прошу тыкнуть пальцем. HA>Как для строки в unicode определить, HA>какая у нее кодовая страница для перевода в однобайтовую строку, HA>или это невозможно (в тексте есть несовместимые на одной codepage символы).
По поводу последнего... это в принципе возможно как-то так:
Скажем если строка содержит только 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
можем примерно прикинуть язык строки. А вот какую однобайтовую кодировку при этом использовать это уже отдельный вопрос.
Здравствуйте, c-smile, Вы писали:
CS>можем примерно прикинуть *язык* строки. А вот какую однобайтовую кодировку при этом использовать это уже отдельный вопрос.
поправочка: unicode оперирует не языками, но script'ами... feel the difference что называется...
Здравствуйте, zaufi, Вы писали:
CS>>можем примерно прикинуть *язык* строки. А вот какую однобайтовую кодировку при этом использовать это уже отдельный вопрос. Z>поправочка: unicode оперирует не языками, но script'ами... feel the difference что называется...
Технически — да, скриптами. Я просто не уверен что ближе к этой сущности в русском: язык, скрипт или какое-нибудь "начертание".
Я думаю вопрошающий понял что имеется ввиду.
Здравствуйте, uzhas, Вы писали:
U>Здравствуйте, Head Ache, Вы писали:
HA>>Как для строки в unicode определить, HA>>какая у нее кодовая страница для перевода в однобайтовую строку, U>уточните свой вопрос, желательно с примерами
например, вставляют некий текст на unicode в сообщение.
Требуется определить, можно ли передать его как однобайтовую строку или нет.
Если нельзя, это будет, например, utf-8 в base64, если можно, будет кодировка "8bit text" с указанием codepage.
То есть, зачем нужно: или иметь непреобразованный текст с возможностью просмотра,
либо без такой возможности и длиннее в 2.6 раз.
У меня есть основания ждать, что кодовые страницы могут быть только ANSI.
OEM, KOI-8 и им подобные исключены вследствие особенностей софта для создания текста сообщения.
Можно, конечно, перебрать в цикле все возможные кодовые страницы,
но эффективнее проверять "unicode ranges" и здесь непонятно, будет ли это однозначно.
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, Head Ache, Вы писали:
HA>>Добрый день, если баян, прошу тыкнуть пальцем. HA>>Как для строки в unicode определить, HA>>какая у нее кодовая страница для перевода в однобайтовую строку, HA>>или это невозможно (в тексте есть несовместимые на одной codepage символы).
CS>if( maxcp — mincp > 127) CS> return more_than_two_codepages;
а это всегда правильно хотя бы для ANSI 125x ?
как-то сомневаюсь.
спасибо за уточнение HA>например, вставляют некий текст на unicode в сообщение. HA>Требуется определить, можно ли передать его как однобайтовую строку или нет.
давайте попробуйте четко сформулировать что вы понимаете под однобайтовой строкой. мне кажется, что любой utf8 текст является однобайтовой строкой
HA>Если нельзя, это будет, например, utf-8 в base64, если можно, будет кодировка "8bit text" с указанием codepage. HA>То есть, зачем нужно: или иметь непреобразованный текст с возможностью просмотра, HA>либо без такой возможности и длиннее в 2.6 раз.
"с возможностью просмотра" в какой кодовой странице? вам по барабану в какой именно?
что за магическое число 2.6 ? при base64 кодировании сообщение увеличивается на ~30 процентов
будет отлично, если вы еще больше расскажете про задачу. вы упомянули base64, для чего вы его применяете? вы текст пытаетесь в xml засунуть? в таком случае неважно читается она или нет, xml — просто транспорт, а правила засовывания строк в xml вполне четко определены и об этом в инете можно почитать
подозреваю, что вы оптимизируете пересылку текста (base64 неэффективен из-за раздувания текста) через какой-то транспорт