今天遇到一个这样的问题
[AjaxMethod]
public void SaveSome(string name, string content)
{
string csName = name;
if (name.Length > 0)
{
string folder = string.Format(@"flows");
string folder_path = Server.MapPath(folder);
string last_content = Server.HtmlDecode(content);
try
{
File.WriteAllText(string.Format(@"{0}\{1}", folder_path, name), last_content, System.Text.Encoding.GetEncoding("UTF-8"));
Ext.Msg.Alert("用户提示", "保存成功!").Show();
}
catch
{
Ext.Msg.Alert("用户提示", "保存失败!").Show();
}
}
}
而调用时 var XMLHEAD = '<?xml version="1.0" encoding="gbk"?>';
var xml = XMLHEAD + document.getElementById('FlowXML').value;
Coolite.AjaxMethods.SaveSome(filename, xml);
这里代码会正常执行,但再次加载这个xml时加载不进来,必须在手动的保存一次才可以,这到底是为什么了,经过他们帮助,终于找到问题所在,我们看var XMLHEAD = '<?xml version="1.0" encoding="gbk"?>';这里面用的编码格式是gbk,而在后台代码处我们用的是File.WriteAllText(string.Format(@"{0}\{1}", folder_path, name), last_content, System.Text.Encoding.GetEncoding("UTF-8"));这里的编码格式是utf-8的格式,而记事本在保存时默认的时是没有gbk格式的,只要utf-8和ANSI格式的,说到底也就是编码格式不兼容,因此,改了var XMLHEAD = '<?xml version="1.0" encoding="utf-8"?>';之后一切问题搞定,在这里总结一下,以后用格式的时候尽量都用utf-8格式的,而且在用的时候要统一,这样会少出很多错误。