在开始之前,我想强调一下我正在使用的结构。
<meta content="text/html;charset=utf-8" http-equiv="content-type"/>
。因此它是utf-8 Content-Type: application/x-www-form-urlencoded; charset=UTF-8
这些是症状。我尝试了谷歌告诉我的一切,但我仍然遇到了问题。有没有人知道它可能是什么?如果您需要任何特定的代码段,请告诉我,我会尝试粘贴它。
AJAX处理程序的响应标头
Date: Mon, 09 Nov 2009 11:40:27 GMT
Server: Apache/2.2.10 (Linux/SUSE)
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset="utf-8"
200 OK
在您和this页面的帮助下,我能够找到问题所在。似乎问题不是编码本身,而是Perl将我的变量$ text编码为utf-8两次(根据网站)。解决方案就像添加Encode :: decode_utf8()一样简单。
我一直在寻找完全错误的地方。我感谢所有帮助我在正确的地方搜索的人:)
#spreads upvote love#
答案 0 :(得分:6)
返回以下内容:&amp; 38;&amp; 65;&amp; 116;&amp; 105;&amp; 108;&amp; 100;&amp; 101;&amp; 59;&amp; 38;&amp; 112;&amp; 97 ;&安培; 114;&安培; 97;&安培; 59; ...
这是:
öäü
其中说你的AJAX处理程序正在为其输出使用HTML实体编码函数,即假设来自ISO-8859-1字符集的输入。你可以使用一个知道UTF-8的字符引用编码器,但可能只是编码潜在特殊字符<>&"'
而不是其他字符。
请求具有以下标题Content-Type:application / x-www-form-urlencoded;字符集= UTF-8
MIME类型charset
没有application/x-www-form-urlencoded
这样的参数。这将被忽略。表单编码字符串本质上是基于字节的;由应用程序来决定它们被视为什么字符集(如果有的话;可能应用程序只需要字节)。
答案 1 :(得分:2)
这不是一个答案,而是一个调试建议。首先想到的是尝试发送像Ӓ
这样的HTML实体而不是utf-8代码。要使Perl发送这些,肯定有一个模块或你可以做
my $text =~ s/(.)/"&#" . ord ($1) . ";"/ge;
在我看来,这个问题最可能的原因是JavaScript接收端并且无法理解Perl编码的UTF-8。