powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Создать с помощью FileSystemObject текстовый файл unicode
9 сообщений из 9, страница 1 из 1
Создать с помощью FileSystemObject текстовый файл unicode
    #37965181
Игорь1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

В VB6 создаю текстовый файл и делаю экспорт данных с кодировкой windows-1251 без проблем:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    Dim oFso As New FileSystemObject
    Dim vStream As TextStream

    Set TsStream = oFso.OpenTextFile("c:\test.txt", ForWriting)
    
    vStream.WriteLine "<?xml version=""1.0"" encoding=""windows-1251""?>"
    vStream.WriteLine "<dataroot>"
    vStream.WriteLine "<table1>"
    vStream.WriteLine "<field1>value1</field1>"
    vStream.WriteLine "<field2>value2</field2>"
    vStream.WriteLine "</table1>"
    vStream.WriteLine "</dataroot>"
    
    vTargetStream.Close



Файл создается и корректно отображается в IE.
Но как только пробую изменить encoding на UTF-8, ничего не получается - документ не открывается нормально в IE.
Пробовал и параметр TristateTrue указывать, и строки явно конвертировал с помощью StrConv(Trim$(sLine), vbUnicode)
но что-то ничего не получается.
Не подскажет ли кто-нибудь пример правильного кода для создания правильного XML-документа формата unicode?

Заранее спасибо.
...
Рейтинг: 0 / 0
Создать с помощью FileSystemObject текстовый файл unicode
    #37965197
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ничего, что объявлена одна переменная, текст пишется во вторую, а закрывается вообще третья?
А ничего, что чисто английский текст одинаково выглядит что в 1251, что в utf-8?

Самый правильный способ — создавать через MSXML2 DOM, это гарантирует отсутствие ситуаций, которые сделают документ невалидным: <field2>val>ue2</field2>

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  Dim oFso As New FileSystemObject
    Dim vStream As TextStream

    Set TsStream = oFso.OpenTextFile("c:\test.txt", ForWriting, True, TristateTrue)
    
    TsStream.WriteLine "<?xml version=""1.0"" encoding=""utf-8""?>"
    TsStream.WriteLine "<dataroot>"
    TsStream.WriteLine "<table1>"
    TsStream.WriteLine "<field1>валюе1</field1>"
    TsStream.WriteLine "<field2>валюе2</field2>"
    TsStream.WriteLine "</table1>"
    TsStream.WriteLine "</dataroot>"
    
    TsStream.Close

Все прекрасно открывается.
...
Рейтинг: 0 / 0
Создать с помощью FileSystemObject текстовый файл unicode
    #37965247
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy
Код: vbnet
1.
    Set TsStream = oFso.OpenTextFile("c:\test.txt", ForWriting, True, TristateTrue)


имхо, это - сохранит в кодировке utf-16

10654655
...
Рейтинг: 0 / 0
Создать с помощью FileSystemObject текстовый файл unicode
    #37965249
катастрофа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,
подскажите пожалуйста, ForWriting, True, TristateTrue - что означает?
и более ничем Ваш код не отличается, то есть это добавили и выполняется сказанное Вами: Самый правильный способ — создавать через MSXML2 DOM???
...
Рейтинг: 0 / 0
Создать с помощью FileSystemObject текстовый файл unicode
    #37965250
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty112Antonariy
Код: vbnet
1.
    Set TsStream = oFso.OpenTextFile("c:\test.txt", ForWriting, True, TristateTrue)


имхо, это - сохранит в кодировке utf-16

10654655 Кстати да...
...
Рейтинг: 0 / 0
Создать с помощью FileSystemObject текстовый файл unicode
    #37965270
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty112Antonariy
Код: vbnet
1.
    Set TsStream = oFso.OpenTextFile("c:\test.txt", ForWriting, True, TristateTrue)


имхо, это - сохранит в кодировке utf-16

10654655

сори,
только я не тот аргумент функции выделил (это в CreateTextFile - он булевый)

в OpenTextFile, так
Код: vbnet
1.
    Set TsStream = oFso.OpenTextFile("c:\test.txt", ForWriting, True, TristateTrue)


но, в любом случае, это не utf-8
http://www.script-coding.com/WSH/FileSystemObject.html#3.23. OpenTextFile(<Filename>,<Iomode>,<Create>,<Format>)

<Format> - необязательный, число. Возможные значения:
-2 - Открыть файл в формате, используемом системой по умолчанию.
-1 - Открыть файл в формате Unicode.
0 - Открыть файл в формате ASCII (по умолчанию).
...
Рейтинг: 0 / 0
Создать с помощью FileSystemObject текстовый файл unicode
    #37966347
Игорь1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильно я понял, что объект ADODB.Stream лучше подходит для целей экспорта в различные кодировки, чем объект Scripting.TextStream?
Т.е. по сути, с помощью Scripting.TextStream можно экспортировать только с кодировкой Windows-1251 и UTF-16, но с UTF-8 и в другие - нельзя.
...
Рейтинг: 0 / 0
Создать с помощью FileSystemObject текстовый файл unicode
    #37966402
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да.
...
Рейтинг: 0 / 0
Создать с помощью FileSystemObject текстовый файл unicode
    #37966575
Игорь1973
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо :)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Создать с помощью FileSystemObject текстовый файл unicode
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]