<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blog.darkthread.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>黑暗執行緒 : jQuery, 中文編碼</title><link>http://blog.darkthread.net/blogs/darkthreadtw/archive/tags/jQuery/_2D4E8765E87DBC78_/default.aspx</link><description>Tags: jQuery, 中文編碼</description><dc:language>zh-CHT</dc:language><generator>CommunityServer 2007.1 (Debug Build: 20917.1142)</generator><item><title>TIPS-jQuery.get整合BIG5編碼ASP</title><link>http://blog.darkthread.net/blogs/darkthreadtw/archive/2009/07/10/jquery-get-big5.aspx</link><pubDate>Thu, 09 Jul 2009 13:29:26 GMT</pubDate><guid isPermaLink="false">d08a49d6-af59-4068-8b43-b7c037f78068:4939</guid><dc:creator>Jeffrey</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blog.darkthread.net/blogs/darkthreadtw/rsscomments.aspx?PostID=4939</wfw:commentRss><comments>http://blog.darkthread.net/blogs/darkthreadtw/archive/2009/07/10/jquery-get-big5.aspx#comments</comments><description>&lt;span id="PostName"&gt;&lt;/span&gt; &lt;p&gt;直接用程式說明一下今天遇到的狀況，呼叫端是個純HTML網頁，用jQuery.get呼叫後端程式取得一段文字結果:&lt;/p&gt;  &lt;div class="BlogCodeBlock"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;meta&lt;/span&gt; &lt;span class="attr"&gt;http-equiv&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;content-type&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;content&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;text/html; charset=UTF-8&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt; &lt;span class="attr"&gt;src&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;../js/jquery-1.3.2.js&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;    &amp;lt;script type=&lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;

    &lt;pre&gt;        $(&lt;span class="kwrd"&gt;function&lt;/span&gt;() {&lt;/pre&gt;

    &lt;pre class="alt"&gt;            $.ajaxSetup({ cache: &lt;span class="kwrd"&gt;false&lt;/span&gt; });&lt;/pre&gt;

    &lt;pre&gt;            $.get(&lt;span class="str"&gt;&amp;quot;ServerSide.asp&amp;quot;&lt;/span&gt;, {}, &lt;span class="kwrd"&gt;function&lt;/span&gt;(r) {&lt;/pre&gt;

    &lt;pre class="alt"&gt;                alert(r);&lt;/pre&gt;

    &lt;pre&gt;            });&lt;/pre&gt;

    &lt;pre class="alt"&gt;        });&lt;/pre&gt;

    &lt;pre&gt;    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;ServerSide.asp是古早時代寫的ASP網頁，為簡化起見，假設內容是&amp;lt;% Response.Write &amp;quot;Job Done!&amp;quot; %&amp;gt;，執行結果正常，前端會彈出Job Done!訊息。&lt;/p&gt;

&lt;p&gt;使用者反應訊息是英文看嘸，所以想改成&lt;font color="#00ff00"&gt;&amp;lt;% Response.Write &amp;quot;作業完成&amp;quot; %&amp;gt;。&lt;/font&gt;修改後alert有彈出來，但訊息部分空白一片，感覺上像ServerSide.asp傳回空字串一樣。&lt;/p&gt;

&lt;p&gt;想了一下，應是Encoding問題，古代的ASP輸出結果用的是BIG5編碼；而HTML端的XmlHttpRequest預設會用UTF-8去解譯傳回的BIG5編碼文字，投捕默契不佳形成暴投。我用escape(r)偷看了一下解譯結果，
  &lt;br /&gt;&lt;font color="#ff8000"&gt;%uFFFF @ %uFFFF%7E%uFFFF%uFFFF%uFFFF%uFFFF&lt;/font&gt;，證實是中文編碼錯解無誤。&lt;/p&gt;

&lt;p&gt;解決方法很簡單，設法在傳回結果時強制宣告編碼方式為BIG5，讓XHR可以正確解讀即可。由於只打算傳回單純文字，因此沒法用&amp;lt;meta http-equiv=”content-type”&amp;gt;宣告編碼，所幸ASP裡還有Response.ContentType可用。ServerSide.asp程式改為:&lt;/p&gt;

&lt;p&gt;&lt;font color="#00ff00"&gt;&amp;lt;% Response.ContentType=&amp;quot;text/plain; charset=big5”
    &lt;br /&gt;Response.Write &amp;quot;作業成功&amp;quot; %&amp;gt;&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;HTML端就能正確承接結果囉。
  &lt;/p&gt;&lt;img src="http://blog.darkthread.net/aggbug.aspx?PostID=4939" width="1" height="1"&gt;</description><category domain="http://blog.darkthread.net/blogs/darkthreadtw/archive/tags/Tips/default.aspx">Tips</category><category domain="http://blog.darkthread.net/blogs/darkthreadtw/archive/tags/_2D4E8765E87DBC78_/default.aspx">中文編碼</category><category domain="http://blog.darkthread.net/blogs/darkthreadtw/archive/tags/jQuery/default.aspx">jQuery</category></item></channel></rss>