Страницы: 1
RSS
Кодировка в UTF-8 без BOM
 
Добрый день коллеги. Недавно искал здесь на форуме, создание xml и  перекодировку его в UTF-8. Нашел, сделал. Но оказалось, все не так просто. UTF-8 оказалась с BOM  и не ложится в систему из за лишних байтов.
Нашел в интернете код, с UTF-8 без BOM. Но он почему то не хочет работать. Вернее одна строка. Как код до нее доходит, то ексель зависает и вылетает с ошибкой.
Прошу вашей помощи, кому интересно посмотрите код. Я там все расписал. Если возникнут вопросы задавайте.
Изменено: alexthegreat - 04.06.2018 11:29:50
 
alexthegreat, а что мешает скопировать в текстовый редактор и поменять кодировку там? И где, собственно, текст?
Изменено: StoTisteg - 04.06.2018 11:31:49
 
http://excelvba.ru/code/Encode
 
StoTisteg это все идет автоматически. пользователь заполняет таблицу в екселе, далее жмет кнопку - программа сама формирует файл xml перекодирует его в utf -8 далее ложит на шину, шина его передает в электронный архив. Это все происходит без участия пользователей. Все автоматически.
В общем то я это все реализовал. Но файл оказался с тремя лишними байтами UTF-8 с BOM. и этот файл не ложится в архив. Нужно избавиться от первых трех байтов. Нашел второй код. Он подходит полностью, но одна строка зависает. Я не пойму почему
В примере в коде я эту строку выделил и подписал.
Может у кого то есть похожий код рабочий. Буду очень благодарен, если кто выложит или подскажет в чем у меня ошибка.
Изменено: alexthegreat - 04.06.2018 11:35:47
 
RAN    Спасибо. Но ссылку у меня блокируют....к сожалению.... :(  . Хотя раньше не блокировали..
Изменено: alexthegreat - 04.06.2018 11:37:06
 
https://yandex.ru/search/?text=ADODB.Stream%20without%20BOM&clid=2233627&lr=2

.Position = 3
По вопросам из тем форума, личку не читаю.
 
БМВ я эти коды уже перелопатил. выдают ошибку. может я что то не так делаю. я уже весь инет перерыл. поэтому и обратился на форум.
 
Цитата
Но ссылку у меня блокируют....к сожалению...
можно узнать, какой антивирус и какой браузер?

а код - вот он:

Код
' Функция для перекодировки файла в UTF-8 без BOM (то же самое, что и UTF-8, только без первых 3 байтов)

Function ChangeFileCharset_UTF8noBOM(ByVal filename$, Optional ByVal SourceCharset$) As Boolean
    ' функция перекодировки (смены кодировки) текстового файла
    ' В качестве параметров функция получает путь filename$ к текстовому файлу,
    ' Функция возвращает TRUE, если перекодировка прошла успешно
    On Error Resume Next: Err.Clear
    DestCharset$ = "utf-8"
    With CreateObject("ADODB.Stream")
        .Type = 2
        If Len(SourceCharset$) Then .Charset = SourceCharset$        ' указываем исходную кодировку
        .Open
        .LoadFromFile filename$        ' загружаем данные из файла
        FileContent$ = .ReadText        ' считываем текст файла в переменную FileContent$
        .Close
        .Charset = DestCharset$        ' назначаем новую кодировку "utf-8"
        .Open
        .WriteText FileContent$
 
        'Write your data into the stream.

        Dim binaryStream As Object
        Set binaryStream = CreateObject("ADODB.Stream")
        binaryStream.Type = 1
        binaryStream.Mode = 3
        binaryStream.Open
        'Skip BOM bytes
        .Position = 3
        .CopyTo binaryStream
        .Flush
        .Close
        binaryStream.SaveToFile filename$, 2
        binaryStream.Close
    End With
    ChangeFileCharset_UTF8noBOM = Err = 0
End Function


' Функция перекодировки текста в UTF-8 без BOM
Function EncodeUTF8noBOM(ByVal txt As String) As String
    For i = 1 To Len(txt)
        l = Mid(txt, i, 1)
        Select Case AscW(l)
            Case Is > 4095: t = Chr(AscW(l) \ 64 \ 64 + 224) & Chr(AscW(l) \ 64) & Chr(8 * 16 + AscW(l) Mod 64)
            Case Is > 127: t = Chr(AscW(l) \ 64 + 192) & Chr(8 * 16 + AscW(l) Mod 64)
            Case Else: t = l
        End Select
        EncodeUTF8noBOM = EncodeUTF8noBOM & t
    Next
End Function
Изменено: Игорь - 04.06.2018 11:52:43
 
Игорь антивирус Dr.Web   Браузер гугл хром
 
Игорь по коду. Идет ошибка : Wrong number of arguments or invalid property assignment  если по другому ссылаюсь то ошибка Argument not optional
Верхний код возвращает пустой документ. Нижний сразу ошибку выдает. Буду думать дальше. что же не так.
Изменено: alexthegreat - 04.06.2018 12:08:30
 
alexthegreat, в какой строке?
 
StoTisteg  по какому коду вопрос? Если тот что в файле. то там я выделил и справа написал что в этой строке вылетает с ошибкой. по коду Игоря выше написал.
Причем верхний код Игоря. Видит текст, берет его, но когда идет переконвертация, в итоге значение = пусто почему то .
Изменено: alexthegreat - 04.06.2018 12:11:11
 
По коду Игоря. Верхнему коду   FileContent$ = .ReadText   возвращает пусто, либо знаки вопроса вместо текста. Не могу понять почему и в конце пишет False. Перекодировка не прошла.  
Изменено: alexthegreat - 04.06.2018 12:34:59
 
Всем спасибо. Вроде разобрался. Файл создается. Буду тестировать.
Еще раз спасибо.
Страницы: 1
Наверх