Страницы: 1
RSS
как конвертировать строку или файл из windowas-1251 в unicode UTF-8, vba, кодировка
 
1. как сконвертировать значение ячейки "в—Џ" в значение ячейки "●" ?
2. как сконвертировать windows-1251 файл со строкой "в—Џ" в UTF-8 файл с юникодным символом "●" ?



ChangeTextCharset с известного сайта не срабатывает:
Код
MsgBox ChangeTextCharset("в—Џ", "Windows-1251", "UTF-8")
MsgBox ChangeTextCharset([A1], "Windows-1251", "UTF-8")

.
Изменено: KUDRIN - 03.04.2026 07:31:26
 
vba перекодировка символов windows-1251 в UTF-8
Согласие есть продукт при полном непротивлении сторон
 

Здравствуйте. Для вашего конкретного примера. У вас в ячейке A1 текст в кодировке UTF-8. результат будет в ячейке B1 кодировка 1251. Макрос в одну строку.

Код
Sub enstaralggt()
Cells(2) = CreateObject("OlePrn.OleCvt.1").ToUnicode(Cells(1), 65001)
End Sub

Изменено: Евгений Смирнов - 03.04.2026 19:32:21
 
Цитата
Евгений Смирнов написал:
Макрос в одну строку
класс! работает, первый раз вижу эту "OlePrn.OleCvt.1"
это он, драйвер принтера? https://learn.microsoft.com/ru-ru/windows-hardware/drivers/print/iolecvt-automation-interface

а вот обратное кодирование длинное
Код
Sub enstaralggt2()
With CreateObject("ADODB.Stream")
.Type = 2: .Mode = 3
.Charset = "UTF-8"   'исходная
.Open
.WriteText [A2]
.Position = 0
.Charset = "windows-1251" 'новая
txt = .ReadText
.Close
End With
[B2] = Mid(txt, 4)
End Sub

а как сделать из Unicode в ANSI коротко ?
это не получается:
Код
[B2] = CreateObject("OlePrn.OleCvt.1").DecodeUnicodeName([A2])
[B2] = StrConv([A2], vbFromUnicode)

смежные темы:
Изменить кодировку с ANSI на кодировку UTF-8
VBA проблемы с кодировкой, создать текстовый файл в кодировке UTF-8
Изменено: KUDRIN - 07.04.2026 13:25:13
 

Здравствуйте. А вот преобразование из 1251 в UTF-8 c помощью этого объекта нормально не получается, как я только не пробовал. Я не программист могу ошибаться, но во первых это довольно древний объект, и по моему там немного криво сделали (наверно ошибки в самой библиотеке).  Вообщем я все таки сделал такую процедуру, но она больше чем через Stream и работает медленнее, если хотите нормально перекодировать лучше всего использовать Stream. Если все правильно написать и по скорости будет хорошо и будет универсально из любой в любую кодировку.

 
Цитата
Евгений Смирнов написал:
это довольно древний объект, и по моему там немного криво сделали (наверно ошибки в самой библиотеке)
ну, количество символов постоянно дополняются в каждой новой версии юникода , поэтому неудивительно что в разных софтах (да и в разных виндах) некоторые символы отображаются вопросиками
Изменено: KUDRIN - 08.04.2026 04:55:42
Страницы: 1
Читают тему
Наверх