我用 pyshark 输出一个 JSON 文件,但非 ASCII 字符是乱码 [关闭]

I output a JSON file with pyshark, but non-ASCII characters are garbled [closed]

提问人:kin 提问时间:11/15/2023 最后编辑:kin 更新时间:11/16/2023 访问量:50

问:


这个问题是由错别字或无法再现的问题引起的。虽然类似的问题可能在这里是主题,但这个问题的解决方式不太可能帮助未来的读者。

5天前关闭。

我想检查捕获的数据并保存 HTTP 对象中包含的 json 文件。我成功地保存了它,但我注意到 json 文件中包含的日语字符是乱码。当我使用 show as JSON 在 Wireshark 中显示此捕获时,它已成功显示,我想使用 pyshark 执行此操作。

def ExportJson():
    print("Start Export")
    file_numberP = 1
    output_json = "json/"
    cap= pyshark.FileCapture("pcap/captured_packets2.pcap", display_filter='http', use_json=True)

    for packet in cap:
        if hasattr(packet.http, 'file_data'):
            if  'puuid' in packet.http.file_data and "common.region" not in packet.http.file_data:
                if 'name' in packet.http.file_data:
                    print(packet.http.file_data)
                    filename = f"output{file_numberP}.json"
                    with open(os.path.join(output_json, filename), "w", encoding='utf-8') as f:
                        f.write(packet.http.file_data)
                    file_numberP += 1

输出 json 文件的一部分

[{"id":6302377,"puuid":"10cabd00-37ac-53a0-88c5-b116e6ae2753","accountId":200452569,"name":"������������","internalName":"������������"

在 wireshark 中显示为 JSON

[
    {
        "accountId": 200452569,
        "expPoints": 2801,
        "expToNextLevel": 3072,
        "id": 6302377,
        "internalName": "きりたに",

JSON 数据的十六进制转储

0000  5b 7b 22 69 64 22 3a 36  33 30 32 33 37 37 2c 22   [{"id":6 302377,"
0010  70 75 75 69 64 22 3a 22  31 30 63 61 62 64 30 30   puuid":" 10cabd00
0020  2d 33 37 61 63 2d 35 33  61 30 2d 38 38 63 35 2d   -37ac-53 a0-88c5-
0030  62 31 31 36 65 36 61 65  32 37 35 33 22 2c 22 61   b116e6ae 2753","a
0040  63 63 6f 75 6e 74 49 64  22 3a 32 30 30 34 35 32   ccountId ":200452
0050  35 36 39 2c 22 6e 61 6d  65 22 3a 22 e3 81 8d e3   569,"nam e":"・・・・
0060  82 8a e3 81 9f e3 81 ab  22 2c 22 69 6e 74 65 72   ・・・・・・・・ ","inter
0070  6e 61 6c 4e 61 6d 65 22  3a 22 e3 81 8d e3 82 8a   nalName" :"・・・・・・
0080  e3 81 9f e3 81 ab 22 2c  22 70 72 6f 66 69 6c 65   ・・・・・・", "profile
0090  49 63 6f 6e 49 64 22 3a  36 33 36 39 2c 22 6c 65   IconId": 6369,"le
00A0  76 65 6c 22 3a 33 36 30  2c 22 65 78 70 50 6f 69   vel":360 ,"expPoi

我查看了其中包含的属性,但无法弄清楚。packet.http.file_data

python 编码 ascii pyshark

评论

0赞 tripleee 11/16/2023
可能是编码错误,但我们无法猜测数据包使用哪种编码,或者您在查看 JSON 文件时尝试使用哪种编码。也许还可以查看 Stack Overflow 字符编码标记信息页面
0赞 kin 11/16/2023
可能使用 utf-8 进行数据包编码。在查看 JSON 文件时,我尝试了 utf-8、utf-16、shift-jis 和 ecu-jp。
0赞 tripleee 11/16/2023
同样,无法从您发布的信息中知道实际字节数是多少;你能显示原始数据包和/或JSON数据的十六进制转储吗?(我猜 JSON 字节只是一个 U+FFFD 序列,用于指示字符进入 JSON 之前的编码错误。
0赞 tripleee 11/16/2023
如果您以二进制模式打开文件(然后显然不指定编码),这有帮助吗?"wb"
0赞 kin 11/16/2023
添加 JSON 数据的十六进制转储。

答: 暂无答案