xml和utf-8显示中文的故事

前两天碰到一个奇怪的问题,现在把解决过程和大家分享一下.

故事是这样发生的,公司培训部有了新的工作内容,是根据法国总部的培训部的要求,使用的一套网上培训工具,但是原来的法文需要更改为中文,就要求我们解决一下这个问题.

拿到手一看,是一个目录,里面有很多文件夹,也有一些xml文件,Word文档. 还有exe文件,执行exe后播放了Flash,里面的文字内容是法文.根据人事部介绍,里面的内容可以都改成成法文,据说法国那边是用一个软件编辑修改内容的. 又仔细仔咨询了一下,了解到由于法国使用的软件无法输入中文,因此不能照搬这个方法.

看来只能另辟蹊径了.

仔细查看目录结构,发现有一个Word文档,用法语介绍了如何通过修改xml文件来修改Flash中播放的文字内容.虽然是法文的,但是连蒙带猜,也明白了一二.文档的最后介绍该Exe是一个离线播放的版本,还可以直接通过浏览器播放swf格式的flash文件.

再打开和exe文件同名的xml文件,发现里面的内容就是播放时显示的文字.尝试修改xml文件中的内容,发现无变化.又仔细查看了目录结构,发现应该修改datas目录下的同名xml文件中的相关内容.修改后发现中文显示是乱码.

到了此处,陷入了一个僵局. 现在的问题是我可以简单地修改xml文件的内容,输入中文,但是问题是播放Flash的时候,却又不能显示中文.

静下心来又想了一会,在琢磨如何显示中文的问题,联想到以前网上的讨论贴,一个文件,不论是中文的还是英文的,理论上都是二进制的 001101001....,那么如何将这些二进制的数据显示为中文或是英文呢?这就是编码格式的问题了,我们知道英文的ASCII码只用了127位,中文是双字节的编码方式,如果用ASCII码的方式解析中文的双字节码,就会产生乱码.例如"我" 的编码是"CE D2",用ASCII就回单独解析CE和D2,而不作为一个整体解析.为了解决这个问题,产生了Unicode编码. Unicode只是一个字符集,意在创建一个统一的字符集. UTF-8就是Unicode规范下的一种编码方式,也就是将Unicode字符集中包含的某一串字符表示为一串字节的方法. 他包含了几乎所有的语言编码,理论上可以编码到6字节长(也就是可以存储6字节的字符).

再多说一句,同样内容的文件,由于编码方式的不同,其二进制的码是不一样的.比如,你可以使用16进制编辑器编辑一个"我是Apple!"的文档,它的 16进制是"CE D2 CA C7 41 70 70 6C 65",这里的中文一般是用GB2312方式编码的,也就是"我"的GB2312编码是CE D2"如果你用UTF-8编码,那就是"FF FE 11 62 2F 66 41 00 70 00 70 00 6C 00 65 00",可以看到UTF-8 用两个字节来表示ASCII,在低字节补零.这里"我" 的编码是"11 62".

上面解释了一些关于编码的问题,主要涉及到了中文的编码. 在我的问题中,我的想法是这样的: Flash在播放时是调用xml文件中的内容作为显示输出的,由于该Flash是法国总部创建的,采用了ASCII方式进行字符编码,因此对于中文的双字节数据无法解析,也就会产生乱码了. 对应的Flash文件,无论是swf格式还是exe播放格式的,都不可能找到重新区设定它的字符集.因此,我只能从xml文件入手, 改变这个文件的编码方式,迫使Flash在通过xml文件读取信息时,使用能够解析中文的编码方式来解读.

那该如何改变编码方式,改成什么编码方式呢? 看了上文,你我都清楚了,可以转换为UTF-8的编码方式. 用UltraEdit打开xml文件,用中文更改其中的显示内容,保存,然后转换为UTF-8格式.

通过这样的转换工作后,重新执行exe文件, 终于能够显示中文了.


后记
以上的分析,没有考虑操作系统的字符集支持. 不过Windows2000是支持Unicode字符集的UTF-8编码的,也就是所有的中文(其实不光是中文,还包括其它的很多字符集)都可以显示.当然了,你也可以在支持GB2312字符集的系统中正常显示中文的GB2312编码.这个在这里就不说了.

具体关于UTF-8的知识,可以参考http://www.linuxforum.net/books/UTF-8-Unicode.html ,
这个网页不是我原来看到,但是内容是一样的.

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 当使用 AJAX 发送数据时,我们通常需要确保数据的编码格式为 UTF-8,以避免中文等非 ASCII 字符出现乱码的情况。以下是使用 AJAX 发送 UTF-8 编码的示例: ``` var xhr = new XMLHttpRequest(); xhr.open('POST', '/api/submit', true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText); } }; var data = 'name=' + encodeURIComponent('张三') + '&age=18'; xhr.send(data); ``` 在上面的示例中,我们先通过 `xhr.setRequestHeader()` 方法设置请求头中 `Content-Type` 属性为 `application/x-www-form-urlencoded; charset=UTF-8`,以指定发送的数据编码格式为 UTF-8。 然后,我们使用 `encodeURIComponent()` 方法对数据进行编码,以确保非 ASCII 字符正确传输。最后,使用 `xhr.send()` 方法发送数据。 在服务端接收到数据后,也需要确保数据的编码格式为 UTF-8,以正确解析含有非 ASCII 字符的数据。 ### 回答2: Ajax(Asynchronous Javascript and XML)是一种在网页中使用的异步的Web开发技术,它通过JavaScript和XML(现在也可以是JSON等数据格式)实现数据的异步加载和交互,从而提升用户体验。 UTF-8(Unicode Transformation Format 8-bit)是一种能够对全世界所有字符进行编码的一种字符编码,它可以用来表示Unicode字符集中的所有字符。UTF-8是一种变长的编码方式,它通过使用1到4个字节来表示不同的字符,这样可以减少存储和传输的空间。 在Ajax中使用UTF-8编码有以下几个方面的作用和好处: 1. 多语言支持:UTF-8编码可以支持全球范围内的多种语言,包括中文、英文、法文、德文等等。使用UTF-8编码可以确保在Ajax请求中传输的数据能够正确地表示和处理各种语言的字符。 2. 数据的正确性:UTF-8编码可以将特殊字符和非ASCII字符正确地表示和传输,这对于包含特殊字符或表情符号等的数据处理非常重要。使用UTF-8编码可以避免因特殊字符导致的数据传输错误或乱码问题。 3. 网络传输效率:由于UTF-8是一种变长编码方式,相对于固定长度的编码方式(如UTF-16)来说,它可以节省传输数据的空间。这对于Ajax请求来说尤为重要,因为Ajax请求需要通过网络传输数据,使用UTF-8编码可以减少数据传输量,提升网络传输效率。 总之,Ajax和UTF-8是互相独立的技术,但它们可以结合使用,提升Web应用的用户体验和数据处理能力。通过在Ajax请求中使用UTF-8编码,我们可以确保正确地处理各种语言的字符,避免数据传输错误和乱码问题,同时提高网络传输效率。 ### 回答3: Ajax是一种网页开发技术,用于实现异步的数据交互。而UTF-8是一种字符编码标准,用于表示各种语言的字符。在Ajax中,可以使用UTF-8编码来处理数据的传输和显示。 首先,Ajax可以通过XMLHttpRequest对象发送请求并接收响应数据。当发送请求时,可以通过设置XMLHttpRequest对象的属性来指定使用UTF-8编码。例如,可以使用`xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");`来设置请求头中的字符编码。 在接收响应数据时,可以通过XMLHttpRequest对象的属性来获取服务器返回的数据。如果服务器使用UTF-8编码返回数据,可以直接使用`xhr.responseText`来获取响应内容。 在将数据显示到网页上时,也需要确保网页使用UTF-8编码。可以通过在网页的头部添加`<meta charset="UTF-8">`来指定网页的字符编码。 使用Ajax与UTF-8编码可以更好地处理各种语言的字符。UTF-8编码可以表示世界上所有的字符,包括汉字、日语、韩语等各种字符。而Ajax可以通过异步请求将数据与服务器进行交互,实现更加流畅和高效的用户体验。通过使用Ajax和UTF-8编码,可以轻松地处理多语言环境下的数据交互和显示
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值