现在的位置: 首页 > 综合 > 正文

网页显示乱码分析(包括如何修改浏览器语言)

2013年10月19日 ⁄ 综合 ⁄ 共 2084字 ⁄ 字号 评论关闭

显示方框通常是因为手机端没有对应字库;而显示乱码通常是由于浏览器采用的解码方式与网页内容采用的编码方式不匹配,出现这些现象,主要有以下几方面原因: 
1.手机不支持相关字库 
 如用只支持英文的手机访问中文网站,网页中的中文字符会显示为方框,可用对比机访问相同网站,得知网站是什么语言,并在手机中加入对应字库即可。 
2.浏览器语言设置不正确(这类情况最为普遍) 
 引用代码中注释如下:Most of the operator proxies and web servers will check the request header,"Accept-Language" to determine the natural language of the response,We should suggest our customers to define the set of natural languages that are preferred/supported by
the handset in bra_prof.c. 即应根据手机支持的语言或字库来配置浏览器能接受的语言,否则server可能传回手机不支持的语言,这时网页字符可能显示方框或乱码,因此请务必根据手机支持的语言(或字库)情况,配置浏览器语言。如: 
#define BRA_CFG_ACCEPT_LANGUAGE_HEADER \ 
 "en," \ 
 "zh-TW" \ 
 "zh " 
以上设置表示,当前浏览器支持英语(en),繁体中文(zh-TW),简体中文(zh),更多语言代码可参考如下链接: 

http://www.comsharp.com/GetKnowledge.aspxActivePageMenuName=pMultiCulture&KnowledgeID=92&PrintFriendly=true 

【注】设置Browser V02的accept language请参考:WAP_COMMON_CFG_ACCEPT_LANGUAGE_PREFERENCE,另外在V02上,可以通过如下方式修改函数bam_cfg_default_accept_language_header()来定位是否是因为浏览器语言设置不正确引起显示异常: 
bam_cfg_default_accept_language_header() 

#if 1 
return BAM_CFG_ACCEPT_LANGUAGE_HEADER //即这里直接返回该宏的定义 
#else 
... //注释掉该函数原有代码 
#endif 

 
3.Server/proxy返回的http header无编码信息,且网页内容采用UTF-8以外的方式编码。 
例如:某proxy返回的http header中没有携带编码信息,但实际网页内容却采用GB2312,此时Q03C Browser会采用默认的UTF-8方式(见:BRS_CFG_DEFAULT_CHARSET)解码。但由于网页内容不是UTF-8编码,此时也将显示乱码。如遇这种case(严格来说,属于网络端issue),可将BRS_CFG_DEFAULT_CHARSET修改为GB2312来满足该proxy。注意:由于BRS_CFG_DEFAULT_CHARSET会在lib中引用,如果BRS_CFG_DEFAULT_CHARSET被定义为函数形式,则客户可以自行配置该值,否则,需要release
patch更新lib。 
 
4.服务器返回的网页”内容编码”与http header中携带的编码内容不一致。 
例如:http header中携带的是GB2312,但实际内容确采用UTF-8,这时浏览器按照GB2312去解码时将显示乱码(这种现象在国内的部分联通proxy上出现过),这种情况,属于server端故障,且无法在Q03C Browser上解决(Q05A浏览器可通过手动选定某解码方式来处理这种server端故障)。

5.Q03C browser不认识http header中携带的编码”别名”。 
比如:在msf_xchr_table[]中有如下item: {2025, "GB2312", "gbk,csGB2312,GB_2312-80,iso-ir-58,chinese,csISO58GB231280", msf_xchr_gb2312_to_utf8, msf_xchr_utf8_to_gb2312}, 其中红色部分为
GB2312的别名,如果http header中用其他名字,如EUC_CN(与GB2312编码一致),则浏览器会因为找不到对应的解析函数而显示乱码。这种情况可将EUC_CN加 GB2312的别名序列。 
【注】关于proxy返回给手机的网页内容请查看catcher log中MSG_ID_TCPIP_TCM_DATA_IND携带的内容,该消息会携带“charset=xxxx”这样的信息,通过该消息可得知server/proxy采用的网页编码方式;或可以通过参考“如何从catcher log中提取出http数据”这条FAQ得知server/proxy返回的HTTP和HTML内容。

抱歉!评论已关闭.