Excel 到 JSON(含 VBA)土耳其字符问题

Excel to JSON (with VBA) Turkish character issue

我正在将 Excel table 转换为 Json VBA。
但是,当我查看输出 Json 文件时,土耳其语字符看起来并不流畅。

例如,

in Excel table, "HAYRETTIN YILMAZ"
in Json, HAYRETTÝN YILMAZ

in Excel table, "HÜSEYİN DURAK"
in Json, HÜSEYÝN DURAK

我该如何解决?

您可以在下面找到我的 VBA 代码:

Sub deneme()
  savename = "deneme.js"
    Dim wkb As Workbook
    Dim wks As Worksheet
    Set wkb = ThisWorkbook
    Set wks = wkb.Sheets(2)
    lcolumn = wks.Cells(1, Columns.Count).End(xlToLeft).Column          ' Var olan sütunun en sonu
    lrow = wks.Cells(Rows.Count, "A").End(xlUp).Row                     ' Var olan satırın en sonu
    Dim titles() As String

    ReDim titles(lcolumn)
    For i = 1 To lcolumn
        titles(i) = wks.Cells(1, i)
    Next i

wks.Columns(50).ClearContents
json = "var deneme = { " & vbCrLf
dq = """"
m = 1
For i = 2 To ActiveSheet.Range("a1048576").End(3).Row
    If WorksheetFunction.CountIf(wks.Columns("a"), wks.Cells(i, 1)) = 1 Then

    json = json & vbCrLf & dq & wks.Cells(i, 1) & dq & ": {" & vbCrLf
                For k = 1 To lcolumn
                cellvalue = wks.Cells(i, k)
                json = json & dq & titles(k) & dq & ":" & dq & cellvalue & dq
                If k <> lcolumn Then            ' Son sütun değilse
                json = json & "," & vbCrLf

                ElseIf k = lcolumn Then
                json = json & vbCrLf & "}," & vbCrLf
                End If

                Next k

        'json = json & dq & wks.Cells(1, 1) & dq & ":" & dq & wks.Cells(i, 1) & dq & "," & vbCrLf
        'json = json & dq & wks.Cells(1, 2) & dq & ":" & dq & wks.Cells(i, 2) & dq & "," & vbCrLf
        'json = json & dq & wks.Cells(1, 3) & dq & ":" & dq & wks.Cells(i, 3) & dq & "," & vbCrLf
        'json = json & dq & wks.Cells(1, 4) & dq & ":" & dq & wks.Cells(i, 4) & dq & vbCrLf & "}," & vbCrLf

    Else
        If wks.Cells(i, 50) = "" Then
            For j = i To ActiveSheet.Range("a1048576").End(3).Row
            If wks.Cells(j, 1) = wks.Cells(i, 1) Then
    If j = i Then

    json = json & dq & wks.Cells(i, 1) & dq & ": [{" & vbCrLf
         For k = 1 To lcolumn
                cellvalue = wks.Cells(i, k)

                json = json & dq & titles(k) & dq & ":" & dq & cellvalue & dq

                If k <> lcolumn Then            ' Son sütun değilse
                json = json & "," & vbCrLf

                ElseIf k = lcolumn Then
                json = json & vbCrLf & "},"
                End If

                Next k

    'json = json & dq & wks.Cells(1, 1) & dq & ":" & dq & wks.Cells(j, 1) & dq & "," & vbCrLf
    'json = json & dq & wks.Cells(1, 2) & dq & ":" & dq & wks.Cells(j, 2) & dq & "," & vbCrLf
    'json = json & dq & wks.Cells(1, 3) & dq & ":" & dq & wks.Cells(j, 3) & dq & "," & vbCrLf
    'json = json & dq & wks.Cells(1, 4) & dq & ":" & dq & wks.Cells(j, 4) & dq & vbCrLf & "},"

    Else

    json = json & vbCrLf & "{" & vbCrLf

     For k = 1 To lcolumn
                cellvalue = wks.Cells(i, k)
                json = json & dq & titles(k) & dq & ":" & dq & cellvalue & dq

                If k <> lcolumn Then            ' Son sütun değilse
                json = json & "," & vbCrLf

                ElseIf k = lcolumn Then
                json = json & vbCrLf & "},"
                End If

                Next k

    'json = json & dq & wks.Cells(1, 1) & dq & ":" & dq & wks.Cells(j, 1) & dq & "," & vbCrLf
    'json = json & dq & wks.Cells(1, 2) & dq & ":" & dq & wks.Cells(j, 2) & dq & "," & vbCrLf
    'json = json & dq & wks.Cells(1, 3) & dq & ":" & dq & wks.Cells(j, 3) & dq & "," & vbCrLf
    'json = json & dq & wks.Cells(1, 4) & dq & ":" & dq & wks.Cells(j, 4) & dq & vbCrLf & "},"
    End If
    wks.Cells(j, 50) = 1
    End If
    Next j
    json = Left(json, Len(json) - 1) & "]," & vbCrLf
    End If
    End If
    Next i
    json = Left(json, Len(json) - 3) & vbCrLf & "}" & vbCrLf & "}"

    myFile = "C:\Users\xxx\Desktop\" & savename
    Open myFile For Output As #1
    Print #1, json
    Close #1    
End Sub

@PeterT,我不想使用 JsonConverter,因为我们公司的政策。因此,我在上面写了我的代码。当我使用 Excel 到 Json 的代码时,"HAYRETTIN YILMAZ" 似乎是 "HAYRETTÝN YILMAZ".

此外,您的第 3 项已更改。 "HÜSEYİN DURAK" -> "H\u00DCSEY\u0130N DURAK"。 Json转换器有同样的问题。

我该如何解决?

谢谢。

我 运行 使用 JsonConverter 进行了测试并取得了以下结果。这与您得到的有什么不同吗?

Option Explicit

Sub deneme()
    Dim topLevel As Dictionary
    Set topLevel = New Dictionary

    topLevel.Add "Item1", Cells(1, 1).Value
    topLevel.Add "Item2", Cells(1, 2).Value
    topLevel.Add "Item3", Cells(2, 1).Value
    topLevel.Add "Item4", Cells(2, 2).Value

    Dim json As String
    json = ConvertToJson(JsonValue:=topLevel, Whitespace:=2)

    Debug.Print json
End Sub

生成以下 JSON:

{
  "Item1": "HAYRETTIN YILMAZ",
  "Item2": "HAYRETT\u00DDN YILMAZ",
  "Item3": "H\u00DCSEY\u0130N DURAK",
  "Item4": "H\u00DCSEY\u00DDN DURAK"
}