Vbs windows 1251 to utf 8

Как поменять кодировку у файла при помощи объекта ADODB.Stream на примере ANSI и UTF-8

Наверное многие сталкивались с проблемой смены кодировки в файле посредством Windows. В данной статье я расскажу как можно сменить кодировку посредством VBScript.

Из всех рассмотренных вариантов я решил остановиться на создании объекта ADODB.Stream. Поставим себе задачу преобразовать файл кодировки ANSI в UTF-8. Суть нашего способа будет такова:

  1. создаем объект ADODB.Stream с параметрами исходной кодировки
  2. открываем исходный файл
  3. считываем в переменную весь файл
  4. меняем параметры ADODB.Stream
  5. записываем содержимое файла

Для начала создадим объект ADODB.Stream.

Set str= CreateObject(«ADODB.Stream»)

Установим необходимые параметры, откроем и прочитаем файл.

str.Type = 2
str.Charset = "windows-1251"
str.Open()
str.LoadFromFile("C:ANSI.txt")
Text = ADODBStream.ReadText()
str.Close()

str.Type = 2 говорит о том, что будет текстовый тип данных. Для справки, если бы мы установили str.Type равным единице, то объект бы считал, что будет daftar situs judi slot online terpercaya бинарный тип данных. В официальной документации написано, что по умолчанию используется текстовый тип, т.е. Type = 2.

str.Charset = «windows-1251» указывает на кодировку. По умолчанию используется кодировка «Unicode».

Text = ADODBStream.ReadText()  считывает текстовый файл целиком из объекта. Данные должны быть обязательно текстовыми, для считывания бинарных данных используется другой метод. Также это метод имеет параметры

  • ReadText(-1) — считывание файла целиком, является параметром по-умолчанию
  • ReadText(-2) — построчное считывание файла

str.Close() закрывает объект ADODB.Stream, но не удаляет его из памяти, следовательно его можно будет заново открыть с другими параметрами.

str.Charset = "UTF-8"
str.Open()
str.WriteText(Text)
str.SaveToFile "C:UTF-8.txt", 2
str.Close()

str.WriteText(Text) записывает текст в объект, для записи бинарных данных используется другой метод. Также вторым параметром может быть указано, добавлять ли разделитель строки.

str.SaveToFile «C:UTF-8.txt», 2 записывает файл по указанному пути. Второй параметр может принимать значения:

  • 1 создает файл, если он еще не существует, является значение по умолчанию.
  • 2 перезаписывает данные в имеющемся файле

Вот и все, весь получившийся код ниже.

Set str= CreateObject("ADODB.Stream")
str.Type = 2
str.Charset = "windows-1251"
str.Open()
str.LoadFromFile("C:ANSI.txt")
Text = ADODBStream.ReadText()
str.Close()
str.Charset = "UTF-8"
str.Open()
str.WriteText(Text)
str.SaveToFile "C:UTF-8.txt", 2
str.Close()

comments powered by HyperComments


This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters

Show hidden characters

‘ перекодировка кириллицы в юникод
public function Win1251_ToUTF8(ByVal S)
dim Res, i, AscCode, Symb, b1, b2, utfc
Res = «»
for I = 1 to Len(S)
Symb = Mid(S, I, 1)
AscCode = Asc(Symb)
‘ кириллица кроме ё и Ё
if (AscCode >= 192) and (AscCode <= 255) then
Res = Res & «&#x0» & Hex(AscCode + &H410 192) & «;»
‘ ё
elseif AscCode = 184 then
Res = Res & «ё»
‘ Ё
elseif AscCode = 168 then
Res = Res & «Ё»
‘ №
elseif AscCode = 185 then
Res = Res & «№»
‘ ‘
elseif AscCode = 39 then
Res = Res & «&apos;»
‘ «
elseif AscCode = 34 then
Res = Res & «&quot;»
‘ <
elseif AscCode = 60 then
Res = Res & «&lt;»
‘ >
elseif AscCode = 62 then
Res = Res & «&gt;»
‘ &
elseif AscCode = 38 then
Res = Res & «&amp;»
‘ «
elseif AscCode = 171 then
Res = Res & ««»‘»&laquo;»
‘ »
elseif AscCode = 187 then
Res = Res & «»»‘»&raquo;»
else
Res = Res & Symb
end if
next
Win1251_ToUTF8 = Res
end function

Гена9

0 / 0 / 0

Регистрация: 08.04.2015

Сообщений: 28

1

VBS

16.09.2021, 19:10. Показов 5966. Ответов 22

Метки нет (Все метки)


Здравствуйте!
Есть скрипт vbs, который записывает инфу о версии и сборке системы в Winver.txt
И к сожалению этот файл выводится в кодировке ANSI и соответственно не все символы видны.
Вопрос в том, можно ли перекодировать и вывести его в кодировке utf8, какую запись добавить?
Пробовал разные варианты, но ни один не подходит к этому скрипту или файл сам создается в utf8,но пустым без инфы о системе
Удалось только перекодировать в utf-16le, но оно вообще портит запись в файле

Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Dim objWMI, Win7, ProductInstances
Win7 = False
Call Main()
Sub Main()
    On Error Resume Next
    Set objWMI = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\" & "." & "rootcimv2")
    ExecuteQuery "Caption, Version","Win32_OperatingSystem"
    For Each Instance in ProductInstances
        Set fso=CreateObject("Scripting.FileSystemObject")
        Set objFile=fso.OpenTextFile("WinVer.txt",8,true)
        With objFile
        .WriteLine("Windows Версия: "&Instance.Caption)
        .WriteLine("Сборка: "&Instance.Version)
        End With
    Next
End Sub
 
Function ExecuteQuery(strSelect,strClass)
    Set ProductInstances = objWMI.ExecQuery("SELECT " & strSelect & " FROM " & strClass)
End Function

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



FlasherX

5292 / 2481 / 987

Регистрация: 06.06.2017

Сообщений: 8,483

16.09.2021, 19:26

2

Цитата
Сообщение от Гена9
Посмотреть сообщение

но оно вообще портит запись в файле

С чего бы?

Visual Basic
1
2
3
For Each i in GetObject("winmgmts:\.rootcimv2").ExecQuery("SELECT Caption,Version FROM Win32_OperatingSystem")
   CreateObject("Scripting.FileSystemObject").CreateTextFile("WinVer.txt",1,1).Write "Windows Версия: " & i.Caption & vbCrLf & "Сборка: " & i.Version
Next



1



0 / 0 / 0

Регистрация: 08.04.2015

Сообщений: 28

16.09.2021, 19:59

 [ТС]

3

Цитата
Сообщение от FlasherX
Посмотреть сообщение

С чего бы?

Не помогает и опять же выходной файл в кодировке utf-16 LE с BOM



0



5292 / 2481 / 987

Регистрация: 06.06.2017

Сообщений: 8,483

16.09.2021, 20:21

4

Приложите WinVer.txt.



0



Punkt5

малоболт

1122 / 428 / 185

Регистрация: 30.01.2020

Сообщений: 1,070

16.09.2021, 20:24

5

Гена9, Попробуйте открывать/создавать файл в ANSI, а просто запись делать с предварительной перекодировкой текста в UTF-8 с помощью подпрограммы типа:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
sub writeUTF8toFile(Text) 'Преобразуем строку из Ansi в UTF-8 и сразу выводим в файл.
  Dim Stream
  Set Stream=CreateObject("ADODB.Stream")
  Stream.Type=2
  Stream.Mode=3
  Stream.Open
  Stream.Charset="utf-8" 'Во что преобразуем
  Stream.WriteText Text
  Stream.Position=0
  Stream.Charset="Windows-1251"'Из чего преобразуем
  ObjFile.writeline Mid(Stream.ReadText,4) 'записываем сразу в файл
End Sub

А файл ObjFile так и открывать в ANSI формате.
Или возвращать строку, переделав эту подпрограмму в функцию, или найдя аналогичную функцию преобразвания в нете.



0



0 / 0 / 0

Регистрация: 08.04.2015

Сообщений: 28

16.09.2021, 20:26

 [ТС]

6

Приложено.
С этими цифрами все варианты пробовал
И true и false и местами менял
Все без толку



0



0 / 0 / 0

Регистрация: 08.04.2015

Сообщений: 28

16.09.2021, 20:44

 [ТС]

7

Цитата
Сообщение от Punkt5
Посмотреть сообщение

Или возвращать строку, переделав эту подпрограмму в функцию, или найдя аналогичную функцию преобразования в нете.

К сожалению я в этом не силен, куда и как добавить чтоб заработало
В инете уже больше недели ничего подходящего не нашел к этому скрипту и поэтому уже решил обратиться к знающим!



0



Punkt5

малоболт

1122 / 428 / 185

Регистрация: 30.01.2020

Сообщений: 1,070

16.09.2021, 21:10

8

Лучший ответ Сообщение было отмечено Гена9 как решение

Решение

Цитата
Сообщение от Гена9
Посмотреть сообщение

К сожалению я в этом не силен, куда и как добавить чтоб заработало

А как вы собираетесь приспосабливать к своим задачам то, что вам посоветуют? Вам же наверное не эта мура нужна, что вы приложили?

Конкретно для приложенного случая изменение будет выглядеть так:

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
Dim objWMI, Win7, ProductInstances, objFile, FSO
Win7 = False
Call Main()
 
Sub Main()
    Set fso=CreateObject("Scripting.FileSystemObject")
    Set objFile=fso.OpenTextFile("WinVer.txt",8,true)
 
    Set objWMI = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\" & "." & "rootcimv2")
    ExecuteQuery "Caption, Version","Win32_OperatingSystem"
    For Each Instance in ProductInstances
        writeUTF8toFile("Windows Версия: "&Instance.Caption)
        writeUTF8toFile("Сборка: "&Instance.Version)
    Next
End Sub
 
Function ExecuteQuery(strSelect,strClass)
    Set ProductInstances = objWMI.ExecQuery("SELECT " & strSelect & " FROM " & strClass)
End Function
 
sub writeUTF8toFile(Text) 'Преобразуем строку из Ansi в UTF-8 и сразу выводим в файл.
  Dim Stream
  Set Stream=CreateObject("ADODB.Stream")
  Stream.Type=2
  Stream.Mode=3
  Stream.Open
  Stream.Charset="utf-8" 'Во что преобразуем
  Stream.WriteText Text
  Stream.Position=0
  Stream.Charset="Windows-1251"'Из чего преобразуем
  ObjFile.writeline Mid(Stream.ReadText,4) 'записываем сразу в файл
End Sub

Создание объектов FSO и ObjFile я вынес из цикла — зачем им каждый раз создаваться по новой?



1



0 / 0 / 0

Регистрация: 08.04.2015

Сообщений: 28

16.09.2021, 22:32

 [ТС]

9

Цитата
Сообщение от Punkt5
Посмотреть сообщение

А как вы собираетесь приспосабливать к своим задачам то, что вам посоветуют? Вам же наверное не эта мура нужна, что вы приложили?

Первый раз сталкиваюсь с таким тяжелым скриптом
И до этого еще приспосабливал, а то все выдавал вообще криво косо (с Поднебесной создавали поэтому) и сейчас попробую разобраться
Если нет, то и до этого сделанного хватит и обойдусь без Winver записи
Именно нужно было узнать, как можно преобразовать в utf8 за что Вас Благодарю!

PS: Файл хоть и преобразовался в utf8, а Кириллица все ровно в ней не читается



0



Punkt5

малоболт

1122 / 428 / 185

Регистрация: 30.01.2020

Сообщений: 1,070

16.09.2021, 22:38

10

Лучший ответ Сообщение было отмечено Гена9 как решение

Решение

Цитата
Сообщение от Гена9
Посмотреть сообщение

PS: Файл хоть и преобразовался в utf8, а Кириллица все ровно в ней не читается

А это точно та кириллица, что была записана в него в UTF-8? Или та, что была записана ранее в UTF-16?

Попробуйте в строке

Visual Basic
1
Set objFile=fso.OpenTextFile("WinVer.txt",8,true)

Заменить 8 на 2. Тогда файл будет создан с нуля, даже, если он уже существует.



1



0 / 0 / 0

Регистрация: 08.04.2015

Сообщений: 28

16.09.2021, 23:14

 [ТС]

11

Цитата
Сообщение от Punkt5
Посмотреть сообщение

А это точно та кириллица, что была записана в него в UTF-8? Или та, что была записана ранее в UTF-16?

Записал Кириллицу заново и заменил восьмерку на двойку (по умолчанию), но развития не последовало

Добавлено через 6 минут
Преобразовал файл скрипта в win-1251 и успех, Кириллица читается
А вот с utf8 и oem 866 не читалась



0



5292 / 2481 / 987

Регистрация: 06.06.2017

Сообщений: 8,483

16.09.2021, 23:41

12

Цитата
Сообщение от Гена9
Посмотреть сообщение

А вот с utf8 и oem 866 не читалась

Ха. А при чём тут тогда проблемы кода? Если пишете скрипт с кириллицей, то обязаны сохранять .vbs в ANSI или UTF-16. Проверяйте мой в годной кодировке. Не нужен вам этот монстр на 20-30+ строк. И UTF-8 тоже не нужен.



0



0 / 0 / 0

Регистрация: 08.04.2015

Сообщений: 28

17.09.2021, 11:54

 [ТС]

13

Цитата
Сообщение от FlasherX
Посмотреть сообщение

Ха. А при чём тут тогда проблемы кода? Если пишете скрипт с кириллицей, то обязаны сохранять .vbs в ANSI или UTF-16. Проверяйте мой в годной кодировке. Не нужен вам этот монстр на 20-30+ строк. И UTF-8 тоже не нужен.

Ничего не подходит
И Ваше решение и последующее все делает частично



0



5292 / 2481 / 987

Регистрация: 06.06.2017

Сообщений: 8,483

17.09.2021, 12:35

14

Гена9, что значит «частично»? Приложенный файл говорит о неверном сохранении скрипта. Других проблем тут нет.



0



0 / 0 / 0

Регистрация: 08.04.2015

Сообщений: 28

17.09.2021, 15:13

 [ТС]

15

Цитата
Сообщение от FlasherX
Посмотреть сообщение

что значит «частично»? Приложенный файл говорит о неверном сохранении скрипта. Других проблем тут нет.

Частично это значит нет оригинального решения, чтоб сказать вот все встает на свое места, то есть как хотелось бы
А то что скрипт был написан в совсем другой кодировке это и так ясно



0



5292 / 2481 / 987

Регистрация: 06.06.2017

Сообщений: 8,483

17.09.2021, 15:35

16

Гена9, к чему тут вообще оригинальность? А что и где у вас на свои места в итоге не встало, вы пояснять пока, увы, не хотите.



0



0 / 0 / 0

Регистрация: 08.04.2015

Сообщений: 28

17.09.2021, 16:09

 [ТС]

17

Цитата
Сообщение от FlasherX
Посмотреть сообщение

к чему тут вообще оригинальность?

Да просто говорю
Ваш код выдает без крякозябры если сам файл преобразовать в utf16 le

Добавлено через 3 минуты

Цитата
Сообщение от FlasherX
Посмотреть сообщение

А что и где у вас на свои места в итоге не встало, вы пояснять пока, увы, не хотите.

Хотел чтоб оставалась в utf8, но увы
Благодарю Вас за код!
Вставляется то есть приспосабливается без танцев



0



FlasherX

5292 / 2481 / 987

Регистрация: 06.06.2017

Сообщений: 8,483

17.09.2021, 17:43

18

Цитата
Сообщение от Гена9
Посмотреть сообщение

Да просто говорю

Прежде стоило понятие универсальности загуглить.

Цитата
Сообщение от Гена9
Посмотреть сообщение

если сам файл преобразовать в utf16 le

Какой файл? Скриптовый? Я же привёл кодировки на выбор (LE или BE, не суть). ANSI уместней, т. к. вдвое меньший размер и нет никакого Юникода.

Цитата
Сообщение от Гена9
Посмотреть сообщение

Хотел чтоб оставалась в utf8, но увы

Скрипт? Таковы условия WSH, тут ничего не попишешь. Можно извратиться и с UTF-8, только в этом не будет никакого практического смысла:

Visual Basic
1
2
3
4
5
Set oCvt = CreateObject("OlePrn.OleCvt.1")
For Each i in GetObject("winmgmts:\.rootcimv2").ExecQuery("SELECT Caption,Version FROM Win32_OperatingSystem")
   CreateObject("Scripting.FileSystemObject").CreateTextFile("WinVer.txt", 1).Write _
   oCvt.ToUnicode("Windows Версия: ", 65001) & i.Caption & vbCrLf & oCvt.ToUnicode("Сборка: ", 65001) & i.Version
Next



1



0 / 0 / 0

Регистрация: 08.04.2015

Сообщений: 28

17.09.2021, 20:01

 [ТС]

19

Цитата
Сообщение от FlasherX
Посмотреть сообщение

Прежде стоило понятие универсальности загуглить.

Универсальность или оригинальность, написал просто не в прямом смысле!
Вообще не гуглю, а Яндекслю!

Цитата
Сообщение от FlasherX
Посмотреть сообщение

Какой файл? Скриптовый? Я же привёл кодировки на выбор (LE или BE, не суть). ANSI уместней, т. к. вдвое меньший размер и нет никакого Юникода.

Да, файл скриптовый.
Не заметил где Вы предложили кодировки на выбор.
Пока что сам файл скрипта в кодировке utf16 le с bom.
И кстати хотел спросить в какую кодировку преобразовать чтоб в разных локализованных системах (Например: Английской,Китайской,Японской) работала, то есть записи Версия: и Сборка: выводились на Кириллице!?
Значит как понимаю в ANSI лучше!?

Цитата
Сообщение от FlasherX
Посмотреть сообщение

Скрипт? Таковы условия WSH, тут ничего не попишешь. Можно извратиться и с UTF-8, только в этом не будет никакого практического смысла:

Все понял уже когда столкнулся с этим скриптом — не простой язык.
Да конечно и в utf8 тоже портятся символы часто и глупо это отрицать или верить в уникальность этой кодировки!
Благодарю за новый код!
Еще не использовал — использую отпишусь

Добавлено через 2 минуты

Цитата
Сообщение от Punkt5
Посмотреть сообщение

А как вы собираетесь приспосабливать к своим задачам то, что вам посоветуют?

Уже приспособил и работает как часы!
Пришлось только вот, файл скрипта преобразовать с utf8 в utf16 le с bom — можно и в ansi
Благодарю Вас еще раз за код!



0



5292 / 2481 / 987

Регистрация: 06.06.2017

Сообщений: 8,483

18.09.2021, 03:58

20

Лучший ответ Сообщение было отмечено Гена9 как решение

Решение

Цитата
Сообщение от Гена9
Посмотреть сообщение

Вообще не гуглю, а Яндекслю!

Я уже начинал догадываться.

Цитата
Сообщение от Гена9
Посмотреть сообщение

Не заметил где Вы предложили кодировки на выбор.

В 12 посте, который продублирован (зачем-то) в цитате 13-го:

Цитата
Сообщение от FlasherX
Посмотреть сообщение

обязаны сохранять .vbs в ANSI или UTF-16.

Цитата
Сообщение от Гена9
Посмотреть сообщение

Значит как понимаю в ANSI лучше!?

Нет, в таком случае как раз понадобится UTF-16.

Цитата
Сообщение от Гена9
Посмотреть сообщение

Все понял уже когда столкнулся с этим скриптом — не простой язык.

При чём тут простота языка? WSH — это сервер сценариев, а не язык. У другого интерпретатора этого же языка могут быть другие условия. И похожий батник в ANSI без chcp 1251 даст кракозябры. Язык тут ни при чём.

Цитата
Сообщение от Гена9
Посмотреть сообщение

Да конечно и в utf8 тоже портятся символы часто и глупо это отрицать или верить в уникальность этой кодировки!

Как и в любой кухне, главное уметь правильно готовить, тогда портиться ничего не будет.



1



Asked
9 years, 11 months ago

Viewed
23k times

I have a string assigned to variable that’s encoded as ansi, for example str = "Пирг"
How can I encode it to UTF-8?

asked Mar 5, 2013 at 17:14

user2136786's user avatar

1

You mean when writing it to a file? Like this:

Set stream = CreateObject("ADODB.Stream")
stream.Open
stream.Type     = 2 'text
stream.Position = 0
stream.Charset  = "utf-8"
stream.WriteText str
stream.SaveToFile filename, 2
stream.Close

Edit: If you want the UTF-8 string to go into another variable you could do it like this:

Set stream = CreateObject("ADODB.Stream")
stream.Open
stream.Type     = 2 'text
stream.Position = 0
stream.Charset  = "utf-8"
stream.WriteText str
stream.Flush
stream.Position = 0
stream.Type     = 1 'binary
stream.Read(3)      'skip BOM
utfStr = stream.Read
stream.Close

answered Mar 5, 2013 at 17:29

Ansgar Wiechers's user avatar

Ansgar WiechersAnsgar Wiechers

189k23 gold badges240 silver badges313 bronze badges

1

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
    Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

    Обратите внимание:
    1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
    2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
    3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
    4. Используйте теги [ code=vba ] …текст программы… [ /code ] для выделения текста программы подсветкой.
    5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
    6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

    Полезные ссылки:
    user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google


    Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.

    >
    Как создать файл в кодировке UTF-8 с помощью VBScript?

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    29.05.11, 15:38

      Здравствуйте, вот так вот создаётся текстовый файлик на языке VBS:

      ExpandedWrap disabled

        Dim gg, gm

        Set gg = CreateObject(«Scripting.FileSystemObject»)

        Set gm = gg.CreateTextFile(«text.txt», True)

        gm.WriteLine(«текст текст текст»)

        gm.WriteLine(«текст текст текст»)

        gm.WriteLine(«текст текст текст»)

        gm.Close

      Подскажите, что нужно сделать чтобы этот файлик создавался в кодировке UTF-8?
      BOM, не BOM — не важно.


      VSHome



      Сообщ.
      #2

      ,
      29.05.11, 17:59

        Full Member

        ***

        Рейтинг (т): 36

        Примерчик

        ExpandedWrap disabled

          Dim Utf8String

          Utf8String = StrConvert(«Текст будет преобразован к UTF-8», «Windows-1251», «UTF-8»)

          Function StrConvert(Text, FromCharset, ToCharset)

              Dim Stream

              Set Stream = CreateObject(«ADODB.Stream»)

              Stream.Type = 2

              Stream.Mode = 3

              Stream.Open

              Stream.Charset = ToCharset

              Stream.WriteText Text

              Stream.Position = 0

              Stream.Charset = FromCharset

              StrConvert = Stream.ReadText

          End Function


        Zeron



        Сообщ.
        #3

        ,
        29.05.11, 18:27

          Спасибо, а как можно сделать, чтобы этот файл был не BOM?

          Master

          MIF



          Сообщ.
          #4

          ,
          30.05.11, 08:20

            ExpandedWrap disabled

              Set gm = gg.CreateTextFile(«text.txt», True, -1)

            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

            0 пользователей:

            • Предыдущая тема
            • Visual Basic: Общие вопросы
            • Следующая тема

            Рейтинг@Mail.ru

            [ Script execution time: 0,0255 ]   [ 16 queries used ]   [ Generated: 4.02.23, 22:22 GMT ]  

            • Remove From My Forums
            • Question

            • I have a question that is probably pretty simple, but I can’t seem to get it figure out.

              I have a bunch of text in windows-1251 encoding and I was hoping to convert it to utf-8, so it works across different machines easier (i hope).

              I tried something simple like this:

              Dim txt As String = «¥»


              Dim ar() As Byte

              ar = System.Text.Encoding.Default.GetBytes(txt)

              txt = System.Text.Encoding.UTF8.GetString(ar)

               But I’m not getting the result I need, actually I’m only getting the boxes instead of any letters. Now, I know that «ar» does contain a good set of bytes that represent letters in windows-1251, but how do I take that array of bytes and convert it into a utf-8 string?

              Thanks,
              Viktor.

            Answers

            • That character you specified is not in Windows-1251.  See the chart here:  http://www.microsoft.com/globaldev/reference/sbcs/1251.mspx

              The reason that it «almost» works is because Encoding.Default is using your current code page, which must be something other than Windows-1251.  Had you really been converting using Windows-1251, that character would change to a ? mark because it is not in Windows-1251.  If you really want Windows-1251, you would need to use System.Text.Encoding.GetEncoding(«Windows-1251») instead of Encoding.Default.

              > I have a bunch of text in windows-1251 encoding

              Do you have this data in bytes?  If you have it in a String, it has already been converted to Unicode — String is always Unicode.  If this conversion did not happen correctly, the characters in your String might not be correct.

              Once you have it in bytes, it is easy to convert it to a Unicode string:

              Replace:

              txt = System.Text.Encoding.UTF8.GetString(ar) 

              With:

              txt = System.Text.Encoding.Default.GetString(ar) 

              or

              txt = System.Text.Encoding.GetEncoding(«Windows-1251»).GetString(ar) 

              Notice that you need to use the Encoding that corresponds to the format the bytes in the parameter (here, ar) use.

              If you subsequently need to turn txt into UTF-8 bytes, you can use:

              Dim utf8Bytes() As Byte = System.Text.Encoding.UTF8.GetBytes(txt) 

              (There is really no such thing as a UTF-8 String — only UTF-8 Byte array.  Make sure you understand this as it goes along way for dealing with text data in .NET.)

              • Marked as answer by

                Wednesday, July 2, 2008 4:25 PM

            Понравилась статья? Поделить с друзьями:
          • Vboxwindowsadditions exe скачать 64 bit windows
          • Vbox windows additions exe скачать 64 bit
          • Vba windows 1251 to utf 8
          • Vb audio native plug ins for windows pc
          • Vaux com установка на windows 10