最近在写一个使用XXS(跨网站脚本,Cross Site Scripting)做一个应用遇到一些编码方面的问题。总结如下:
-C#中字符串使用UTF8编码,如“ABCDE@中国”算作8个字符。
-C#中字符型变量也使用UTF8编码。
-为了不同字符集网页的都可以显示中文,用aspx页面写入客户端的javascript脚本需要以Response的ContentEncoding 要设为System.Text.Encoding.UTF8类型才不会导致东亚字符集(中文,韩文,日文)出错。而aspx文件的编码形式无所谓。
-静态javascript脚本的文件编码形式应为UTF8,否则其中的中文内容无法正确显示。
-写入客户端的javascript脚本,如果包含中文内容应使用NCR (Numeric character reference) 进行转换。
最后是一段NCR转换的c#实现。
public
static
string
NCRConverter(
string
InputStr)
... {
string result = "";
for (int i = 0; i < InputStr.Length; i++)
...{
char t = InputStr[i];
if (t > 128)
...{
result += "&#" + Convert.ToUInt16(t).ToString() + ";";
}
else
...{
result += t;
}
}
return result;
}
... {
string result = "";
for (int i = 0; i < InputStr.Length; i++)
...{
char t = InputStr[i];
if (t > 128)
...{
result += "&#" + Convert.ToUInt16(t).ToString() + ";";
}
else
...{
result += t;
}
}
return result;
}