С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
3 / 3 / 0
Регистрация: 16.10.2014
Сообщений: 148
1

Чувствую что это все таки кодировка

09.02.2017, 23:30. Показов 2399. Ответов 37
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток уважаемые форумчане!
Организовываю элементарный экспорт данных из Акса в текстовый файл. Иногда он проходит без проблем, а иногда текстовый файл наполнен иероглифами...
Интуитивно понимаю, что дело скорее всего в кодировке...
Может кто посоветует где какой тумблер нажать?..
СПС!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.02.2017, 23:30
Ответы с готовыми решениями:

И все-таки кодировка! не пинайте больно
Да, я уже прочитал все, что тут и не только тут есть по кодировке, где то у меня затык. Очень...

Как же все-таки это реализовать?
Здравствуйте. Хотел бы поинтересоваться и попросить некоторой помощи в написании кода к задаче. Вот...

new - это операция или все таки оператор?
В большинстве интернет-источниках написано, (взять хоть википедию (да, я понимаю, что там много...

И что же все-таки лучше?
Сейчас у меня phpbb3, в целом все устраивает, но не нравится установка модулей, возникают иногда...

37
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
10.02.2017, 08:37 2
Цитата Сообщение от orange3100 Посмотреть сообщение
Организовываю элементарный экспорт данных из Акса в текстовый файл.
Как именно огранизовываете?

Или вы считаете, что споосб только один и потому уточнение не требуется? Так их много. Какой лично вам кажется "элементарным" - мы без понятия.

Кстати, версия акса у вас какая?

Цитата Сообщение от orange3100 Посмотреть сообщение
Иногда он проходит без проблем, а иногда текстовый файл наполнен ...
Если файл наполнен - экспорт определенно прошел без проблем.
1
3 / 3 / 0
Регистрация: 16.10.2014
Сообщений: 148
10.02.2017, 10:41  [ТС] 3
Цитата Сообщение от texnik-san Посмотреть сообщение
Как именно огранизовываете?
Прошу прощения за не грамотное оформление темы. Обычно всегда расписываю все подробно просто подумал, что данном случае этого не требуется...
Методика следующая:
Благодаря Eugene-LS, была написана функция записи текстовой переменной в файл TXT:
Visual Basic
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
Public Function WriteTextInNewTxtFile(FlilePath As String, Text As String) As Boolean
 
'----Объявление Переменных
Dim fso As Object
Dim ts As Object
    '----Переход к обработчику ошибок
    On Error GoTo WriteTextInNewTxtFile_Error
 
'----Выполнение программы
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.CreateTextFile(FlilePath, True, True)
ts.WriteLine Text
ts.Close
    '----Присвоение значения функции
    WriteTextInNewTxtFile = True
 
'----Выход из программы
WriteTextInNewTxtFile_Exit:
    On Error Resume Next
    '----Очищение переменных
    Set ts = Nothing
    Set fso = Nothing
    Exit Function
 
'----Обработчик Ошибок
WriteTextInNewTxtFile_Error:
    '----Вывод сообщения об ошибке
    MsgBox "Ошибка " & Err.Number & vbCrLf & Err.Description & vbCrLf & "в процедуре: ...", vbCritical, "Error!"
    '----Переход к выходу из программы
    Resume WriteTextInNewTxtFile_Exit
 
End Function
а далее путем рекордсета и применением вышеуказанной функции
Visual Basic
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
37
Sub ExportQueriesInTextFile()
 
Dim rst As DAO.Recordset
Dim sDataSet As String
Dim FilePath As String
Dim fso As Object
Dim ts As Object
 
Set rst = Application.CurrentDb.OpenRecordset("qryQueries", dbOpenSnapshot) 'Только просмотр
    Do Until rst.EOF = True 'Цикл до конца таблицы
        With rst.Fields
            sDataSet = sDataSet & !DataSetQuery & vbCrLf & vbCrLf & vbCrLf
        End With
        rst.MoveNext
        'Debug.Print sDataSet
    Loop
Debug.Print sDataSet
    
    
    
WriteTextInNewTxtFile "C:\Users\VG\DataBaseVG\New\prjAcElements\Queries\Queries.txt", sDataSet
 
 
ExportSourceCodesInTextFile_Bye:
    On Error Resume Next
    rst.Close
    'rstSub.Close
    Set rst = Nothing
    'Set rstSub = Nothing
    Exit Sub
 
ExportSourceCodesInTextFile_Err:
    MsgBox "Ошибка " & Err.Number & vbCrLf & Err.Description & vbCrLf & "в процедуре: бла бла", vbCritical, "Error in module Form_фрмГорода"
    Resume ExportSourceCodesInTextFile_Bye
 
    
End Sub
Версия Акса 13
1
10916 / 5608 / 1425
Регистрация: 05.10.2016
Сообщений: 15,852
10.02.2017, 13:36 4
Цитата Сообщение от orange3100 Посмотреть сообщение
была написана функция записи текстовой переменной в файл TXT
Попробуйте исправить функцию экспорта так:
Visual Basic
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
Public Function WriteTextInNewTxtFile(sFilePath As String, sText As String) As Boolean
 
'----Объявление Переменных
Dim fso As Object
Dim ts As Object
    '----Переход к обработчику ошибок
    On Error GoTo WriteTextInNewTxtFile_Error
 
'----Выполнение программы
 
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.CreateTextFile(sFilePath, True)
    ts.Write sText
    ts.Close
    
    '----Присвоение значения функции
    WriteTextInNewTxtFile = True
 
'----Выход из программы
WriteTextInNewTxtFile_Exit:
    '----Очищение переменных
    On Error Resume Next
    Set ts = Nothing: Set fso = Nothing
    Exit Function
    Exit Function
 
'----Обработчик Ошибок
WriteTextInNewTxtFile_Error:
    '----Вывод сообщения об ошибке
    MsgBox "Ошибка " & Err.Number & vbCrLf & Err.Description & vbCrLf & "в процедуре: ...", vbCritical, "Error!"
    '----Переход к выходу из программы
    Resume WriteTextInNewTxtFile_Exit
 
End Function
Тестовый код:
Visual Basic
1
2
3
4
    str = "01 Проверка - строка 01" & vbCrLf & "02 Проверка - строка 02"
    path = "D:\temp\test.txt"
    
    WriteTextInNewTxtFile path, str
- Выбросил текстовик в WIN-1251 (как положено), а до этого было действительно UTF-16LE

Добавлено через 2 минуты
и в процедуре переменные:
Visual Basic
1
2
Dim fso As Object
Dim ts As Object
Лишние - можно смело убрать.
2
3 / 3 / 0
Регистрация: 16.10.2014
Сообщений: 148
10.02.2017, 13:47  [ТС] 5
Eugene а как именно Вы выбросили его в win1251
0
10916 / 5608 / 1425
Регистрация: 05.10.2016
Сообщений: 15,852
10.02.2017, 14:02 6
Цитата Сообщение от orange3100 Посмотреть сообщение
а как именно Вы выбросили его в win1251
Как и писал выше:
Visual Basic
1
2
3
4
5
6
7
Private Sub TestOne()
Dim str$, path$
    str = "01 Проверка - строка 01" & vbCrLf & "02 Проверка - строка 02"
    path = "D:\temp\test.txt"
    
    WriteTextInNewTxtFile path, str
End Sub
2
3 / 3 / 0
Регистрация: 16.10.2014
Сообщений: 148
10.02.2017, 14:14  [ТС] 7
Eugene я заметил изменения в функции только в моей 12-ой вашей 13-ой строке, а именно:
Wrileline--->Write, а что Вы исправили чтобы изменить кодировку с utf на win все равно чтото не понял. Объясните пож-та еще раз..
0
10916 / 5608 / 1425
Регистрация: 05.10.2016
Сообщений: 15,852
10.02.2017, 14:28 8
Главное изменение в объявлении.
Вместо:
Visual Basic
1
Public Function WriteTextInNewTxtFile(FlilePath As String, Text As String) As Boolean
Пишем:
Visual Basic
1
Public Function WriteTextInNewTxtFile(sFilePath As String, sText As String) As Boolean
и дальше соответственно по названиям аргументов.
Название переменной Text (Text As String) - VBA сильно не понравилось ...
Text - одно из зарезервированных слов VBA

Точнее это "Не зарезервированное ключевое слово" - не желательно употреблять в коде.
См. Ключевые слова языка Visual Basic - внизу
2
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
10.02.2017, 20:19 9
Спасибо, orange3100 и Eugene-LS, я как раз такого метода вывода в текстовый файл и не знала раньше. Делала либо встроенными средствами экспорта, либо потсрочно Print #1
0
Эксперт MS Access
26818 / 14497 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
10.02.2017, 20:26 10
orange3100, у метода CreateTextFile есть третий параметр <Unicode>. Если он True, файл в юникоде, если False , то в ASCII. По умолчанию стоит False. Попробуйте поставить True:
Visual Basic
1
Set ts = fso.CreateTextFile(sFilePath, True, True)
2
10916 / 5608 / 1425
Регистрация: 05.10.2016
Сообщений: 15,852
10.02.2017, 20:39 11
Лучший ответ Сообщение было отмечено orange3100 как решение

Решение

Цитата Сообщение от mobile Посмотреть сообщение
у метода CreateTextFile есть третий параметр <Unicode>
А можно вообще расширить ...
Visual Basic
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
37
38
39
40
41
42
43
44
45
46
47
Function SaveTextToFile(ByVal txt$, ByVal filename$, Optional ByVal encoding$ = "windows-1251") As Boolean
' функция сохраняет текст txt в кодировке Charset$ в файл filename$
' [url]http://excelvba.ru/code/SaveTextToFile[/url]
' [url]http://excelvba.ru/code/encode[/url]
'-----------------------------------------------------------------
Dim FSO As Object
Dim ts As Object
Dim binaryStream As Object
 
On Error Resume Next: Err.Clear
    Select Case encoding$
 
        Case "windows-1251", "", "ansi"
            Set FSO = CreateObject("scripting.filesystemobject")
            Set ts = FSO.CreateTextFile(filename, True)
            ts.Write txt: ts.Close
            Set ts = Nothing: Set FSO = Nothing
 
        Case "utf-16", "utf-16LE"
            Set FSO = CreateObject("scripting.filesystemobject")
            Set ts = FSO.CreateTextFile(filename, True, True)
            ts.Write txt: ts.Close
            Set ts = Nothing: Set FSO = Nothing
 
        Case "utf-8noBOM"
            With CreateObject("ADODB.Stream")
                .Type = 2: .Charset = "utf-8": .Open
                .WriteText txt$
 
                Set binaryStream = CreateObject("ADODB.Stream")
                binaryStream.Type = 1: binaryStream.Mode = 3: binaryStream.Open
                .Position = 3: .CopyTo binaryStream        'Skip BOM bytes
                .flush: .Close
                binaryStream.SaveToFile filename$, 2
                binaryStream.Close
            End With
 
        Case Else
            With CreateObject("ADODB.Stream")
                .Type = 2: .Charset = encoding$: .Open
                .WriteText txt$
                .SaveToFile filename$, 2        ' сохраняем файл в заданной кодировке
                .Close
            End With
    End Select
    SaveTextToFile = Err = 0: DoEvents
End Function
2
3 / 3 / 0
Регистрация: 16.10.2014
Сообщений: 148
10.02.2017, 21:32  [ТС] 12
Ой ДРУЗЬЯ ТОВАРИЩИ...
чувствую что мозг закипит...
Для разных таблиц одна и та же функция VBA работает корректно и не корректно...
В чем может дело ну никак что-то не разберу.
Во вложении БД в которой два запроса:
1) qrySourceCodes (Экспортируется без проблем)
2) qryQueries (Экспортируется с Иероглифами)
3) qryQueriesTEST /где 1-а строка/ (Экспортируется с Иероглифами)

Почему одна и та же функция работает по разному с разными запросами???
Вложения
Тип файла: rar База.rar (98.7 Кб, 6 просмотров)
0
Модератор
Эксперт MS Access
12106 / 4966 / 791
Регистрация: 07.08.2010
Сообщений: 14,593
Записей в блоге: 4
10.02.2017, 21:37 13
Цитата Сообщение от orange3100 Посмотреть сообщение
qrySourceCodes (Экспортируется без проблем)
пока запросы не смотрела, но если только латиница и локализованная кириллица --проблем нет
0
10916 / 5608 / 1425
Регистрация: 05.10.2016
Сообщений: 15,852
10.02.2017, 21:54 14
Цитата Сообщение от orange3100 Посмотреть сообщение
одна и та же функция VBA работает корректно и не корректно...
Visual Basic
1
Set ts = fso.CreateTextFile(strFlilePath, True, True)
Зачем? mobile, просто уточнил:
- "'Третий параметр <Unicode>. Если он True, файл в юникоде"
- но вам это не нужно - нужно 1251.
достаточно :
Visual Basic
1
Set ts = fso.CreateTextFile(sTXTPath, True, False)
Или просто:
Visual Basic
1
Set ts = fso.CreateTextFile(sTXTPath, True)
... должно быть 1251 (по уму)
1
Эксперт MS Access
26818 / 14497 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
10.02.2017, 21:59 15
Цитата Сообщение от orange3100 Посмотреть сообщение
Почему одна и та же функция работает по разному с разными запросами???
Да ясно почему. К сожалению вот так бывает с полями MEMO длиной более 255 символов. Достаточно общее решение уже показано Eugene-LS - надо применить ADODB.Stream с указанием кодировки 1251. Либо сокращать количество выводимых символов до 255
0
10916 / 5608 / 1425
Регистрация: 05.10.2016
Сообщений: 15,852
10.02.2017, 22:09 16
Цитата Сообщение от mobile Посмотреть сообщение
К сожалению вот так бывает с полями MEMO длиной более 255 символов.
Точно бывает - уже поймал :
Visual Basic
1
Debug.Print sDataSet
- уже кракозябры выдаёт ... (до экспорта)
Вывот:
Нужно перекодировать ...

Добавлено через 2 минуты
Цитата Сообщение от orange3100 Посмотреть сообщение
В чем может дело ну никак что-то не разберу
Либо - в поле MEMO уже в неверной кодировке данные
Либо - тупо ГЛЮК!
0
3 / 3 / 0
Регистрация: 16.10.2014
Сообщений: 148
10.02.2017, 22:16  [ТС] 17
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Нужно перекодировать ...
это как Вы предлагали "Расширить"?
0
9113 / 6050 / 591
Регистрация: 27.03.2013
Сообщений: 19,881
10.02.2017, 22:16 18
Цитата Сообщение от Eugene-LS Посмотреть сообщение
...Нужно перекодировать ...
Я всегда, первые два действа делаю так:
1. Сжать и восстановить БД.
если не помогло
2. Создаю Новую БД и ИМПОРТИРУЮ в неё всё из - Глюченной.
в 99% эти 2 действия помогають.
Иначе - Да,
Нужно или Репку усиленно чесать (пол сотням форумов лазить и аналогичные вопросы изыскивать или задавать) или заново УСЁ создавать.
2
10916 / 5608 / 1425
Регистрация: 05.10.2016
Сообщений: 15,852
10.02.2017, 22:28 19
Цитата Сообщение от mobile Посмотреть сообщение
Да ясно почему. К сожалению вот так бывает с полями MEMO длиной более 255 символов.
Кстати - в первые замечаю такое!
А MEM-ками пользуюсь давно - и никаких траблов на выводе (экспорте в html = читай TXT) пока не видел (но в своих базах).

Добавлено через 2 минуты
Цитата Сообщение от orange3100 Посмотреть сообщение
это как Вы предлагали "Расширить"?
Ещё не понятно ...
Щас БД - в потроха гляну ....
Отвечу позднее (минуток через 10 -16)

Добавлено через 7 минут
Итак :
Поле: "DataSetQuery"
Запроса: "qryQueriesTEST"
(Первая запись)
Возвращает текст:
start of string --------------------------------
? ? ?? ? ? ?? ?
? ? ?
H? H? ш?H?ш? р?H?H?р?ш?@????? ъ????? ?? ?? Њ??? Ј? ???
? ?????????????????????
??? Њ? ? ? ?? ???? ? ??? ?? ? ??? ? ? ??? ? ? ?? ??

... и ещё много кракозябров ....
end --------------------------------

ВОТ И ВСЁ!
В смысле: Функция Экспорта в Текст - тут не при чём.
0
3 / 3 / 0
Регистрация: 16.10.2014
Сообщений: 148
10.02.2017, 22:30  [ТС] 20
Цитата Сообщение от Eugene-LS Посмотреть сообщение
... и ещё много кракозябров ....
end --------------------------------
ВОТ И ВСЁ!
и что это значит? делать тбл по новому и копировать данные в таблицу
0
10.02.2017, 22:30
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.02.2017, 22:30
Помогаю со студенческими работами здесь

Что же все таки возвращает codePointAt?
Здравствуйте! Не могу понять, почему именно такое значение возвращает функция codePointAt. Знал...

Что же все-таки со скрытом разделом?
Здравствуйте форумчане. Решил обратиться к вам за помощью т.к. самостоятельно ничего не...

Что же все-таки такое ServerName?
Добрый день, уважаемые форумчане. В настоящее время пытаюсь разобраться в настройках Апача, в файле...

Подскажите пожалуйста что это за кодировка, и что за символы в этом предложении?
Кроме тоཾго, рынок цеཾнных бумаг делится по отраслевому,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru