转载自:string.Format出现异常"输入的字符串格式有误"的解决方法
项目调试时始终报错“输入的字符串格式有误”,苦苦寻找原因,终于定位到String.Format()方法,原来是在要用到转义字符时,没有进行转义。修改后能正确运行的代码如下:
#region innerHTML GoogleMap
string innerHTML =
" <style type=\"text/css\">html{{height:100%}} " +
" body{{height:100%;margin:0px;padding:0px}} " +
" #container{{height:100%}} " +
" </style><script type=\"text/javascript\" src=\"http://maps.google.com/maps/api/js?sensor=false\"> " +
" </script><body> " +
" <div id=\"container\"></div> " +
" <script type=\"text/javascript\"> " +
" " +
" var myLatlng = new google.maps.LatLng({0},{1}); " +
" var myOptions = {{zoom: 12, " +
" center: myLatlng, " +
" mapTypeId: google.maps.MapTypeId.ROADMAP " +
" }}; " +
" var map = new google.maps.Map(document.getElementById(\"container\"), myOptions); " +
" var marker = new google.maps.Marker({{position: myLatlng,map: map,title:\"{2}\"}}); " +
" </script>";
#endregion
string innerText = String.Format(innerHTML, Jd, Wd, Title);
Frm51ditu.obj_frm51ditu.WebBrowserOf51ditu.DocumentText = innerText;
一、转义字符
C# 中使用类似 {0}, {1:yyyy-MM-dd} 这样的格式占位符,如果被格式化字符串本身包含 { 或者 } 怎么办呢?
答案:用两个 { 或者 }连写表示单个。
string str1 = String.Format("{{Hello}}, {0}, Now is {{{1:yyyy-MM-dd HH:mm:ss}}}", "Jinglecat", DateTime.Now);
// {Hello}, Jinglecat, Now is {2007-07-18 23:06:35}
string str2 = String.Format("{Hello}, {0}, Now is {{1:yyyy-MM-dd HH:mm:ss}}", "Jinglecat", DateTime.Now);
// System.FormatException: 输入字符串的格式不正确。
事实上,很多情况下带特殊含义的字符都是这样转义的:如C# 中,当字符串常量带 @ 前导的时候,用两个 " 连写表示一个 " (半角双引号)
string str3 = @"My UserName is ""Jinglecat""."; // My UserName is "Jinglecat".
//string str4 = @"My UserName's "Jinglecat""; // error CS1002: 应输入 ;
//string str5 = @"My UserName's \"Jinglecat\""; // error CS1002: 应输入 ;
SQL 字符串常量,用两个 ' 连写表示一个 ' (半角单引号)
DECLARE @str6 varchar(100)
SET @str6 = 'My UserName is ''Jinglecat''.'
PRINT @str6 -- My UserName is 'Jinglecat'.
正则表达式中用,两个 $ 连写表示一个 $ (dollar)
二、String Formatting in C#
略