V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
abelyao
V2EX  ›  问与答

一份 XML 文件在网络传输的过程中,修改了其中的数值,如何会导致中文部分变乱码?

  •  1
     
  •   abelyao · 2016-02-01 15:49:36 +08:00 · 1843 次点击
    这是一个创建于 3219 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先本帖可能会涉及游戏存档修改,但不涉及具体某个游戏,目的仅为技术讨论,希望管理员手下留情,如果实在不合适,可删帖。

    某个游戏,可以在线备份游戏存档,存档恢复的过程中,是一份明文的 XML 格式。
    在传说的过程中,通过拦截等方式,将 XML 中的某些数字进行修改(例如金币),修改之后游戏存档正常恢复,并且游戏可以正常读取到修改之后的金币。
    但是,游戏中的一些中文(例如人名)会变成 ?????? 一堆问号。

    我尝试过:
    - 修改的数值长度不变化,例如原先 10000 金币,我就改成 20000 ,仍然乱码;
    - 将 content-length 的长度一起修改,仍然乱码;
    - 给中文部分加上 CDATA 标签,仍然乱码;

    原本是想改存档,但现在存档已经无所谓了,因为实在想不通为什么会导致中文部分变乱码,而其它部分却可以正常读取。

    冒险来 V2 发个帖子,讨论一下,如果有哪位朋友知道我是说哪个游戏,也请不要提及名称~

    第 1 条附言  ·  2016-02-01 22:31:29 +08:00

    目前已经解决,问题出在服务器输出 XML 文件的时候,没有指明文件编码,
    headers 中的 Content-Type: application/octet-stream
    改为 Content-Type: application/octet-stream; charset=UTF-8 之后问题解决

    5 条回复    2016-02-01 16:13:03 +08:00
    jugelizi
        1
    jugelizi  
       2016-02-01 15:53:47 +08:00   ❤️ 1
    ...乱码看看编辑器是不是修改了编码格式呀
    JiShuTui
        2
    JiShuTui  
       2016-02-01 15:53:57 +08:00   ❤️ 1
    修改的时候改变了文档的编码格式,比如原先是 GBK 的,你改了之后变成了 UTF8 ,或者原先是 UTF8 被你改成 GBK 了。
    abelyao
        3
    abelyao  
    OP
       2016-02-01 15:57:36 +08:00
    @jugelizi 起初是直接复制 XML 内容出来,改后粘贴回去;后来是直接在抓包工具上进行修改(因为只改一个数字也不需要高亮了),但都会有一样的问题
    abelyao
        4
    abelyao  
    OP
       2016-02-01 15:59:20 +08:00
    @JiShuTui 平时有做网页,也算是对编码有警惕, XML 的第一句声明了是一个 UTF-8 编码的文件,而且我在修改的时候大多数是直接复制粘贴替换内容,并没有另起文档。

    不过你和 @jugelizi 都提到这个可能性,我在想会不会是抓包工具把编码弄坏了…
    abelyao
        5
    abelyao  
    OP
       2016-02-01 16:13:03 +08:00
    @jugelizi @JiShuTui
    刚刚试了一下,一份包含中文的文件,只要经过抓包工具的修改,到达客户端之后就会变成 ?????,基本确定是拦截的问题了… 谢谢两位
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5609 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 07:44 · PVG 15:44 · LAX 23:44 · JFK 02:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.