帮助解决网页和JS文件中的中文编码问题的小工具

在JS文件中直接写入一些双字节字符,有时会引发javascript编码错误,在DateChooser控件中就出现过这样的问题,现在一般的较安全的解决方法是把中文字符串转换成类似于"\u5c0f\u5bd2"这样的形式写到JS文件中,下面的代码就是实现双字节的字符和Big endian Unicode之间的相互转换。

    /// <summary>
    
/// 将双字节字符转化成能更好的在网页和JS中使用的BigEndianUnicode
    
/// </summary>

    public abstract class Class2
    
{

        
public static void Main()
        
{
            
string test = "12,农民農民";
            
string entext = EncodingBigEndianUnicode(test);
            WL(test);
            WL(entext);
            WL(DecodingBigEndianUnicode(entext));
            RL();
        }

        
public static string DecodingBigEndianUnicode(string encodedString)
        
{
            System.Text.RegularExpressions.Regex regUnicode 
= new System.Text.RegularExpressions.Regex(@"\\u(?<1>[a-zA-Z0-9]{2})(?<2>[a-zA-Z0-9]{2})");
            System.Text.RegularExpressions.MatchCollection mc 
= regUnicode.Matches(encodedString);
            
string s = string.Empty;
            
foreach(System.Text.RegularExpressions.Match m in mc)
            
{
                
byte b1 = byte.Parse(m.Groups[1].Value,System.Globalization.NumberStyles.HexNumber);
                
byte b2 = byte.Parse(m.Groups[2].Value,System.Globalization.NumberStyles.HexNumber);
                s 
+= System.Text.Encoding.BigEndianUnicode.GetString(new byte[]{b1,b2});
            }

            
return s;
        }

        
        
public static string EncodingBigEndianUnicode(string text)
        
{
            
string s = string.Empty;
            
for(int i = 0 ; i < text.Length ; i ++)
            
{
                
string s1 = text.Substring(i,1);
                
byte[] bs = System.Text.Encoding.BigEndianUnicode.GetBytes(s1);
                s1 
= @"\u";
                
foreach(byte b in bs)
                
{
                    
string s2 = b.ToString("x");
                    
if(s2.Length == 1)
                        s2 
= "0" + s2;
                    s1 
+= s2;
                }

                s 
+= s1;
            }

            
return s;
        }

        
Helper methods
    }
posted @ 2005-12-27 13:17 THIN 阅读(4704) 评论(12)  编辑 收藏 所属分类: ASP.netDHTML & Javascript

  回复  引用  查看    
#1楼 2005-12-27 16:42 | 一帆(老鼠粮仓之路)      
不要这样麻烦啊
在web.config里面直接写:
<globalization requestEncoding="GB2312" responseEncoding="GB2312" fileEncoding="GB2312"/>
就OK拉
  回复  引用  查看    
#2楼 [楼主]2005-12-27 17:05 | THIN      
呵呵,一帆所说只能说在自己的应用中可以这样做,要是你要把JS文件发布出去给别人用呢,还有,如果一个JS文件要给很多页面引用等等情况
  回复  引用  查看    
#3楼 2005-12-27 17:28 | flower.b      
不错。

我现在是调用js的时候指定编码格式

<script charset=utf-8 src=xxxx ......

这样如果调用页面是非UTF-8格式,也可以正常调用JS文件,不用对JS中内容做修改。
  回复  引用    
#4楼 2005-12-27 18:26 | 宝 玉 [未注册用户]
确实是终极解决方案
  回复  引用  查看    
#5楼 2005-12-27 19:49 | NoMagic      
这是个老问题啊,把js文件另存为UTF8格式难道不可以吗?
  回复  引用  查看    
#6楼 2005-12-27 23:14 | 猪头      
<script src=ads_1.js charset="GB2312"></script>

这样不好吗?请指教,谢谢.
  回复  引用  查看    
#7楼 [楼主]2005-12-28 10:02 | THIN      
很好,沒什麼不好,只是如果部署更广时,如不是仅给自己的程序引用时……
  回复  引用    
#8楼 2006-02-14 15:45 | wj [未注册用户]
很好,发现这里高手不少啊,一下看到了3种解决方案!好
  回复  引用  查看    
#9楼 2006-02-22 01:18 | birdshome      
直接用ms的script encode: SCRENC 就能把中文编码成这样子:)
  回复  引用    
#10楼 2006-06-17 16:34 | 偷米饭 [未注册用户]
楼主的办法太麻烦了..
<script charset=utf-8 src=xxxx ......
这种办法....不能通过xhtml1.0验证
<script src=ads_1.js charset="GB2312 ...
编码改成GB2312不好...还是用UTF-8比较好..

最好的办法就是用记事本打开js文件之后另存为
选项那里改成UTF-8类型...
  回复  引用    
#11楼 2007-11-27 21:35 | 534534 [未注册用户]
534534534534
  回复  引用    
#12楼 2008-07-19 21:15 | bushy [未注册用户]
偷米饭 的这个办法是个终极的解决办法,我试过了,嗯,不错。。。

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
 
另存  打印