今天,用javascript脚本做了一个asp.net页面中的菜单工具,保存为menuscript.js. 在页面中用<script language="javascript" src="../js/menuscript.js"></script>调用, 结果在运行中奇怪的现象发生了:页面中的汉字正常显示,可菜单中的汉字却显示为乱码。
不用问,用膝盖想一想也是编码出了问题在该页面的“查看”-“编码”选项中切换utf-8和gb2312两种编码,结果页面中的汉字和菜单中的汉字交替变为乱码
解决方法:配置文件中有编码设置:<globalization requestencoding="utf-8" responseencoding="utf-8" />
menuscript.js文件保存时有编码选项(可用word打开此文件再另存,选择编码),只需保持这两处编码一样即可。
为了更好的了解编码问题,在csdn中找到了一篇这方面的文章,作者:fmddlmyy。在此转载一下,以供参考:
谈谈编码
谈谈编码#region 谈谈编码
/**//*
0、big endian和little endian
big endian和little endian是cpu处理多字节数的不同方式。例如“汉”字的unicode编码是6c49。那么写到文件里时,究竟是将6c写在前面,还是将49写在前面?如果将6c写在前面,就是big endian。还是将49写在前面,就是little endian。
“endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(big-endian)敲开还是从小头(little-endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。
我们一般将endian翻译成“字节序”,将big endian和little endian称作“大尾”和“小尾”。
1、字符编码、内码,顺带介绍汉字编码
字符必须编码后才能被计算机处理。计算机使用的缺省编码方式就是计算机的内码。早期的计算机使用7位的ascii编码,为了处理汉字,程序员设计了用于简体中文的gb2312和用于繁体中文的big5。
gb2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从b0-f7,低字节从a1-fe,占用的码位是72*94=6768。其中有5个空位是d7fa-d7fe。
gb2312支持的汉字太少。1995年的汉字扩展规范gbk1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的gb18030是取代gbk1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的pc平台必须支持gb18030,对嵌入式产品暂不作要求。所以手机、mp3一般只支持gb2312。
从ascii、gb2312、gbk到gb18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,gb2312、gbk到gb18030都属于双字节字符集 (dbcs)。
有的中文windows的缺省内码还是gbk,可以通过gb18030升级包升级到gb18030。不过gb18030相对gbk增加的字符,普通人是很难用到的,通常我们还是用gbk指代中文windows内码。
这里还有一些细节:
gb2312的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上a0。
在dbcs中,gb内码的存储格式始终是big endian,即高位在前。
gb2312的两个字节的最高位都是1。但符合这个条件的码位只有128*128=16384个。所以gbk和gb18030的低字节最高位都可能不是1。不过这不影响dbcs字符流的解析:在读取dbcs字符流时,只要遇到高位为1的字节,就可以将下两个字节作为一个双字节编码,而不用管低字节的高位是什么。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器