Извлечение данных из формата файла UTF-8 и их импорт в формат файла utf-8 в VBA

Я хотел бы извлечь данные японских букв из формата файла UTF-8 и скопировать их в другой формат файла utf-8.

Ожидаемый результат: カカカカカカカカカ字字字字字字字

Фактический результат: ・カ・カ・カ・カ・カ・'蟄怜ュ怜ュ怜ュ怜ュ怜ュ怜 (garbage data)

Sub ReadTextFileDataInExcel()
    Dim TblNum As String
    TblNum = Worksheets("data").Range("A2").Value
    Dim RowNumber   As Long
    Dim TextFile    As String
    Dim LineData    As String
    Dim stemp() As Collection
    Dim Test As Variant
    
    TextFile = ThisWorkbook.path & "\" & TblNum & "\" & "CA003" & "\10_RunScript\20.ExpectResult.sql"
    
    MyDir = ThisWorkbook.path & "\" & TblNum & "\" & "CA003" & "\10_RunScript"
        MyFileName = MyDir & "\40.ExpectResult.sql"
      
    RowNumber = 1
     
    Dim newTxt As String
    Open TextFile For Input As #1
        Do While Not EOF(1)
            Line Input #1, LineData
            If LineData Like "insert*" Then
                Worksheets("40.ExpectResult_TEMP").Range("A" & RowNumber).Value = LineData
                LineData = Replace(LineData, "_DUMMY", "")
                newTxt = newTxt & vbCr & LineData
                RowNumber = RowNumber + 1
            End If
            WriteIfFile_utf8 MyFileName, Mid(newTxt, 2)
        Loop
    Close #1
    
            
End Sub

Function WriteIfFile_utf8(strPath As Variant, str As Variant)
    Dim objStream As Object
    Dim utfStr As Variant
    Set objStream = CreateObject("adodb.stream")

    With objStream
        .Type = 2 'adTypeText
        .Charset = "SHIFT-JIS"
        .Open
        .writetext str
        .savetofile strPath, 2
        .Close
    End With
    Set objStream = Nothing
End Function

«копирование в другой формат файла utf-8», тогда почему бы не использовать utf8 для формата выходного файла?

Tim Williams 11.06.2024 22:47

Уже пробовал, результат тот же. Он дает мусорные данные.

Janarie Jamel 12.06.2024 02:26
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
2
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это сработало для меня, используя образец текста, который вы опубликовали:

Sub ReadWriteUTF8()
    
    Dim inFile As String, outFile As String
    Dim LineData As String, inStream As Object, outStream As Object
    
    inFile = "C:\Temp\inputSample.txt"
    outFile = "C:\Temp\outputSample.txt"
    
    Set inStream = GetUTF8Stream(inFile)
    Set outStream = GetUTF8Stream()
    
    Do While Not inStream.EOS
        LineData = inStream.ReadText(-2) 'adReadLine
        Debug.Print LineData Like "*" & vbCr, LineData
        If LineData Like "insert*" Then
            outStream.WriteText LineData, 1 'adWriteLine
        End If
    Loop
    inStream.Close
    outStream.SaveToFile outFile, 2 'adSaveCreateOverWrite
    outStream.Close
End Sub

'return an ADODB.Stream set up for UTF-8 text
Function GetUTF8Stream(Optional strPath As String = "") As Object
    Set GetUTF8Stream = CreateObject("adodb.stream")
    With GetUTF8Stream
        .Type = 2           'adTypeText
        .Charset = "utf-8"
        .LineSeparator = -1 'adCRLF=-1, adCR=13, adLF=10
        .Open
        If Len(strPath) > 0 Then .LoadFromFile strPath
    End With
End Function

Другие вопросы по теме