Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Прочитать файл в кодировке UCS-2 LE BOM
|
|||
|---|---|---|---|
|
#18+
Есть действующий достаточно большой проект в С++ Builder 6. В проект надо добавить функционал чтения CSV файла, разбора его строк на отдельные поля и запись значений в рабочую БД. Все решается достаточно просто, но камень преткновения - это кодировка CSV файла, который формируется сторонним ресурсом. Кодировка UCS-2 LE BOM, одна из разновидностей UTF16. Надо читать файл и преобразовывать строки в CP1251. Пробую считать весь файл в буфер при помощи TFileStream и его метода Read. А как дальше содержимое буфера преобразовать в ANSI? Запутался с ф-циями MultiByteToWideChar ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 19:27 |
|
||
|
Прочитать файл в кодировке UCS-2 LE BOM
|
|||
|---|---|---|---|
|
#18+
SQLWalkerЗапутался с ф-циями MultiByteToWideChar Потому что тебе нужна как раз обратная - WideCharToMultibyte. Или тупо используешь UnitodeToAnsi из VCL. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 19:35 |
|
||
|
Прочитать файл в кодировке UCS-2 LE BOM
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, спасибо за подсказку, но я все равно дальше не могу продвинуться. Ну вот есть char Buffer[], в нем считан побайтно нужный файл. Как именно два раза надо вызвать WideCharToMultibyte, чтоб на выходе получить ANSI? Какой там должен быть самый первый параметр? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 19:44 |
|
||
|
Прочитать файл в кодировке UCS-2 LE BOM
|
|||
|---|---|---|---|
|
#18+
SQLWalkerНу вот есть char Buffer[] Уже смешно. Если это UCS-2, то должен быть WCHAR Buffer[]. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 19:45 |
|
||
|
Прочитать файл в кодировке UCS-2 LE BOM
|
|||
|---|---|---|---|
|
#18+
SQLWalkerКак именно два раза надо вызвать WideCharToMultibyte, чтоб на выходе получить ANSI? Какой там должен быть самый первый параметр? Открываем документацию, смотрим: Parameters CodePage [in] Specifies the code page used to perform the conversion. This parameter can be given the value of any code page that is installed or available in the system. For a list of code pages, see Code Page Identifiers. You can also specify one of the following values. Value Meaning CP_ACP ANSI code page Какое слово тут тебе непонятно? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 19:47 |
|
||
|
Прочитать файл в кодировке UCS-2 LE BOM
|
|||
|---|---|---|---|
|
#18+
SQLWalker, Ищите для вашего большого проекта в С++ Builder 6 компоненту #include <iconv.h> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 19:51 |
|
||
|
Прочитать файл в кодировке UCS-2 LE BOM
|
|||
|---|---|---|---|
|
#18+
Из просторов Интернета: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. srcCodepage=1200 (или какая там надо...) dstCodepage=1251; Я таким образом гоняю 1251 (ANSI) => UTF-8 и обратно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2018, 22:19 |
|
||
|
Прочитать файл в кодировке UCS-2 LE BOM
|
|||
|---|---|---|---|
|
#18+
d7iИз просторов Интернета: srcCodepage=1200 (или какая там надо...) dstCodepage=1251; Я таким образом гоняю 1251 (ANSI) => UTF-8 и обратно... D7i, не работает у меня Ваш код. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Смотрю отладчиком. Файл в буфер читается нормально. Я вижу в src те же байты, что и HEX-редактором. ReadCount возвращает реальный размер файла. Но на первом же вызове MultiByteToWideChar(srcCodepage, 0, src, -1, NULL, 0); wsize возвращает ноль. Понятно, что дальше нет смысла преобразовывать. Пробую исходный буфер заменить на WCHAR. Опять вижу, что буфер заполнился нормально, но опять на первом вызове MultiByteToWideChar возвращает 0. Проблема в значении кодовой таблицы 1200? Вот что пишет MSDN 1200 utf-16 Unicode UTF-16, little endian byte order (BMP of ISO 10646); available only to managed applications ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2018, 11:52 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=22&tid=2017980]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
| others: | 274ms |
| total: | 389ms |

| 0 / 0 |
