|
|
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
Добрый день. Подскажите как можно конвертировать часть строки из одной кодировки в UTF-16LE. В WinAPI есть MultiByteToWideChar, но в ней возможна только полная конвертация строки. Можно задавать уменьшенный размер входного буфера, но я же не знаю какой именно будет размер буфера у строки нужной мне длинны в этой кодировке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 12:16:33 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
Вариант 1: Конвертируй всё, отсекай ненужное. Вариант 2: Задавай размер выходного буфера. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 12:55:32 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Спасибо, значит буду искать размер буфера при котором на выходе будет нужная длина строки. Если у кого есть ещё варианты, то готов выслушать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 13:27:30 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
трутутуСпасибо, значит буду искать размер буфера при котором на выходе будет нужная длина строки. Зачем его искать, если он явно указывается в символах, а не байтах? Или "нужная длина" у тебя в пикселях, а не символах?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 13:38:13 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
Пример: Входной буфер 8КБ, к примеру UTF-8 Выходной 8КБ (4096 WideChar) Все буквы латинские, т.е. размер строки по входному буферу будет 8192 символа. Чтобы сделать конвертацию мне нужен буфер в 2 раза больше, либо передать другой размер входного буфера - 4096, но это значение придется искать методом тыка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 13:44:45 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
трутутуПример: Входной буфер 8КБ, к примеру UTF-8 Выходной 8КБ (4096 WideChar) Все буквы латинские, т.е. размер строки по входному буферу будет 8192 символа. Чтобы сделать конвертацию мне нужен буфер в 2 раза больше, либо передать другой размер входного буфера - 4096, но это значение придется искать методом тыка. Если ты знаешь размер исходного буфера и то, что там все символы однобайтные, то в чём проблема-то передать в cbMultiByte значение 4096? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 13:56:55 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
трутутуВходной буфер 8КБ, к примеру UTF-8 Э-э-э, а вот это совершенно гнилая идея, не будет оно работать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 14:17:56 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
alekcvp, Если бы я знал какие там символы я бы даже функцией MultiByteToWideChar не пользовался. Естественно я не знаю что у меня за данные в строке, мне нужно получить их часть. Dimitry Sibiryakov, Т.е. лучше иметь "одинаковые" буфера, для многобайтовых кодировок - 4096 и 8192 для WideChar, что бы заведомо выходной буфер был равен или больше входного? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 14:27:49 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
трутутуЕсли бы я знал какие там символыТак ты хочешь неизвестно что конвертить? Так не бывает. Разве что случайно наугад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 14:31:29 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
YuRock, Что значит неизвестно что, у меня есть кодовая страница, есть буфер, я хочу получить не весь конвертированный буфер, а только часть, которая помещается в другой буфер. Лично я не вижу никаких сложностей, остановить конвертацию при достижении лимита, но MultiByteToWideChar так не может, вот я и интересуюсь есть ли что ещё для работы с кодировками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 15:07:09 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
трутутуу меня есть кодовая страницаUTF-8 - это не кодовая страница. Кодовая страница бывает у кодировок с фиксированным размером символа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 15:18:45 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
трутутуостановить конвертацию при достижении лимита, но MultiByteToWideCharИменно для этого в этой функции и есть параметр - длина входного буффера, который надо сконвертировать. Не понимаю, чего тебе не хватает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 15:25:33 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
трутутуя не знаю что у меня за данные в строке, мне нужно получить их частьЕсли у тебя часть строки в UTF-8, а часть нет, то границу между ними обязательно надо знать, чтобы эту длину передать в функцию конвертации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 15:28:51 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
YuRock, Работа идет с кодовыми страницами, а UTF-8 я привел как одну из, которые поддерживаются в MultiByteToWideChar и которая точно имеет различный размер в байтах для разных символов. И да, в UTF-8 не вмещается всё множество UTF-32, хоть сейчас оно и не нужно, а раз все (гипотетические) юникодные символы не вмещаются, то это такая же кодовая страница. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 16:54:02 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
трутутуЛично я не вижу никаких сложностей, остановить конвертацию при достижении лимита, но MultiByteToWideChar так не может Кто тебе это сказал? Никогда больше его не слушай, он лжец. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 17:53:21 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
трутуту, Ты можешь объяснить, почему у тебя не получается использовать ф-цию MultiByteToWideChar и её соотв. параметры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 18:20:18 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovтрутутуЛично я не вижу никаких сложностей, остановить конвертацию при достижении лимита, но MultiByteToWideChar так не может Кто тебе это сказал? Никогда больше его не слушай, он лжец. Мне это сказала Windows 8, вернув ошибку: Область данных, переданная по системному вызову, слишком мала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 18:29:08 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
YuRockтрутуту, Ты можешь объяснить, почему у тебя не получается использовать ф-цию MultiByteToWideChar и её соотв. параметры? Вроде мой пример полностью описывает ситуацию и там же описано, что так эта функция не работает. Если же речь идет об указании размера входного буфера, такого что бы размер выходной строки был заданного размера, то его нужно сначала как-то высчитать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 18:33:09 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
трутутуDimitry Sibiryakovпропущено... Кто тебе это сказал? Никогда больше его не слушай, он лжец. Мне это сказала Windows 8, вернув ошибку: Область данных, переданная по системному вызову, слишком мала.Эта ошибка выдается в результате расчета, а не потому, что "не умеет". Просто ты передал слишком маленький буффер для результата, наверно. Как ты определил размер этого буффера? Подсказка: его размер можно спросить у Windows 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 18:34:42 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovтрутутуСпасибо, значит буду искать размер буфера при котором на выходе будет нужная длина строки. Зачем его искать, если он явно указывается в символах, а не байтах? Или "нужная длина" у тебя в пикселях, а не символах?.. Размер входного массива для MultiByteToWideChar указывается в байтах, для выходного - в символах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 18:34:52 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
YuRockтрутутупропущено... Мне это сказала Windows 8, вернув ошибку: Область данных, переданная по системному вызову, слишком мала.Эта ошибка выдается в результате расчета, а не потому, что "не умеет". Просто ты передал слишком маленький буффер для результата, наверно. Как ты определил размер этого буффера? Подсказка: его размер можно спросить у Windows 8. У меня как раз и стоит задача получить часть строки, потому и выходной буфер меньшего размера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 18:36:22 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
трутутучто так эта функция не работает Эта функция работает именно так и только так. трутутучто бы размер выходной строки был заданного размера, то его нужно сначала как-то высчитать. Совет: прочитай уже справку msdn по этой функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 18:38:19 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
трутутуВроде мой пример полностью описывает ситуациюТы не привел никакого примера, одни слова. трутутуУ меня как раз и стоит задача получить часть строки, потому и выходной буфер меньшего размера. Бред какой-то. Передавай часть строки во входной буффер, вот и все проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 18:41:29 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
трутутуМне это сказала Windows 8, вернув ошибку: Область данных, переданная по системному вызову, слишком мала. И это логично, поскольку она действительно мала. Но с чего ты решил, что выходной буфер при этом не заполнился под завязку прежде, чем функция вернула ошибку? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 18:47:01 |
|
||
|
Конвертация части строки
|
|||
|---|---|---|---|
|
#18+
YuRockтрутутуВроде мой пример полностью описывает ситуациюТы не привел никакого примера, одни слова. трутутуУ меня как раз и стоит задача получить часть строки, потому и выходной буфер меньшего размера. Бред какой-то. Передавай часть строки во входной буффер, вот и все проблемы. Проблематично передавать нужную часть буфера, когда ты не знаешь что там, а не знаешь, т.к. ещё не перевел в читаемый формат. Dimitry SibiryakovИ это логично, поскольку она действительно мала. Но с чего ты решил, что выходной буфер при этом не заполнился под завязку прежде, чем функция вернула ошибку? Идея интересная (и верная), но не стоит опираться на не документируемые возможности, ни что не мешает в следующем обновлении изменить поведение функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2017, 19:24:05 |
|
||
|
|

start [/forum/topic.php?fid=58&startmsg=39528781&tid=2041769]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
435ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 707ms |

| 0 / 0 |
