|
Импорт файлов в формате ANSI, UTF-8 и UTF-16
|
|||
---|---|---|---|
#18+
Продолжение поста Импорт CSV файла в Access Вынес в отдельную ветку, Проблема следующая. Excel и Access работают с форматом ANSI (насколько я знаю). Для ввода в программу присылают файлы CSV (те же текстовики) в форматах ANSI, UTF-8 и UTF-16 ANSI и UTF-16 грузятся без проблем (от UTF-16 не ожидал), а вот UTF-8 нормально загрузить не могу. Использую для конвертации в ANSI стороннюю программу Recode (маленькая, работает без установки хелпа нет, так что про командный режим нет данных). Но начальство хочет, чтобы всё решалось в одной программе и никаких лишних телодвижений (женщины-операторы). Пробовал грузить вручную через "Внешние данные" Вот и возникает вопрос, как программно определить формат файла и как обработать файл в формате UTF-8. Пример файла UTF-8 прикрепляю. Если надо то и программу кину. ------------------------------------------------------------- Мы рождены чтоб сказки сделать былью! Даже самые страшные... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 18:57 |
|
Импорт файлов в формате ANSI, UTF-8 и UTF-16
|
|||
---|---|---|---|
#18+
для UTF8: Option Compare Database Option Explicit Private Declare Function MultiByteToWideChar Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long Private Declare Function WideCharToMultiByte Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long Public Function ToUTF8(ByVal sText As String) As String Dim nRet As Long, strRet As String strRet = String(Len(sText) * 2, vbNullChar) nRet = WideCharToMultiByte(65001, &H0, StrPtr(sText), Len(sText), StrPtr(strRet), Len(sText) * 2, 0&, 0&) ToUTF8 = Left(StrConv(strRet, vbUnicode), nRet) End Function Public Function FromUTF8(ByVal sText As Variant) As String Dim nRet As Long, strRet As String sText = Nz(sText, "") strRet = String(Len(sText), vbNullChar) nRet = MultiByteToWideChar(65001, &H0, sText, Len(sText), StrPtr(strRet), Len(strRet)) FromUTF8 = Left(strRet, nRet) End Function ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 19:42 |
|
Импорт файлов в формате ANSI, UTF-8 и UTF-16
|
|||
---|---|---|---|
#18+
Спасибо, попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2021, 20:04 |
|
Импорт файлов в формате ANSI, UTF-8 и UTF-16
|
|||
---|---|---|---|
#18+
Joss, творение не мое, не тестил на примере. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 00:32 |
|
Импорт файлов в формате ANSI, UTF-8 и UTF-16
|
|||
---|---|---|---|
#18+
Joss Пример файла UTF-8 прикрепляю. Если надо то и программу кину. Примерно так можно: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 01:25 |
|
Импорт файлов в формате ANSI, UTF-8 и UTF-16
|
|||
---|---|---|---|
#18+
Спасибо, попробую все предложенные варианты. Правда в предложении Eugene-LS придётся кое-что переделать. Входной файл может достигать несколько сотен КБ, так что скорее всего придётся считывать по строкам. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 14:11 |
|
Импорт файлов в формате ANSI, UTF-8 и UTF-16
|
|||
---|---|---|---|
#18+
Joss Вот и возникает вопрос, как программно определить формат файла и как обработать файл в формате UTF-8. Попробуйте такой код. Он читает указанный файл, автоматически определяя кодировку, и сохраняет копию в ANSI, заменяя существующий. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
О результате сообщите, пжл. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 16:49 |
|
Импорт файлов в формате ANSI, UTF-8 и UTF-16
|
|||
---|---|---|---|
#18+
Наиболее правильным вариантом будет читать текстовый файл с разделителями используя ADO.Recordset через через Microsoft Text ODBC Driver, подробно изложено здесь Экспорт денежного поля в формат CSV . К сожалению, драйвер не поддерживает преобразование из UTF-8. Поэтому текстовые поля в UTF-8 из ADO.Recordset следует преобразовывать функцией FromUTF8(): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2021, 08:53 |
|
Импорт файлов в формате ANSI, UTF-8 и UTF-16
|
|||
---|---|---|---|
#18+
galalex, сАвсем не читатель? Первый же ответ 22399333 . Набираешь сообщения? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2021, 10:36 |
|
Импорт файлов в формате ANSI, UTF-8 и UTF-16
|
|||
---|---|---|---|
#18+
Панург, 1. Решение, предложенное I2S, решением исходной задачи не является, и даже полурешением. Это лишь начальная стадия изобретения велосипеда. 2. Если ты сегодня не понимаешь важности ясности кода - твоя проблема. 3. Насчёт "Набираешь сообщения" ))). Не поверишь, я день ржал )). Спасибо тебе за отличное настроение. В моём личном рейтинге ты соревнуешься с Рожковым за лучшую шутку ноября 21. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2021, 21:44 |
|
Импорт файлов в формате ANSI, UTF-8 и UTF-16
|
|||
---|---|---|---|
#18+
galalex я день ржал galalex 2. Если ты сегодня не понимаешь важности ясности кода - твоя проблема. galalex 21. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2021, 21:46 |
|
Импорт файлов в формате ANSI, UTF-8 и UTF-16
|
|||
---|---|---|---|
#18+
galalex 1. Решение, предложенное I2S, решением исходной задачи не является, и даже полурешением. Это лишь начальная стадия изобретения велосипеда. galalex, да, забыл сказать, это практически один в один одинаковый код с тем что ты гордо тиснул тут ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2021, 22:12 |
|
Импорт файлов в формате ANSI, UTF-8 и UTF-16
|
|||
---|---|---|---|
#18+
Панург, значимость это у тебя, иначе скромнее бы был. "Молодец среди овец, а против молодца сам овца". Заканчивай своей пустой болтовнёй "набирать сообщения". ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2021, 23:12 |
|
Импорт файлов в формате ANSI, UTF-8 и UTF-16
|
|||
---|---|---|---|
#18+
Панург galalex 1. Решение, предложенное I2S, решением исходной задачи не является, и даже полурешением. Это лишь начальная стадия изобретения велосипеда. galalex, да, забыл сказать, это практически один в один одинаковый код с тем что ты гордо тиснул тут Ты походу даже не врубаешься в смысл сказанных мною слов. Тебе помочь догадаться, или сам допрёшь, коль такой важный? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2021, 23:21 |
|
Импорт файлов в формате ANSI, UTF-8 и UTF-16
|
|||
---|---|---|---|
#18+
galalex Ты походу даже не врубаешься в смысл сказанных мною слов. Тебе помочь догадаться, или сам допрёшь, коль такой важный? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 08:21 |
|
|
start [/forum/topic.php?fid=45&msg=40114765&tid=1609546]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
152ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 258ms |
0 / 0 |