2011-10-12 56 views
1

我试图带入一些CSS的csv来啃和吐出一个html页面。 csv有一些特殊字符,如½×。根据Firebug的说法,当我在$ .get()的回调内部放置一个断点时,看起来已经有特殊字符丢失了。如果我将其复制并过滤到另一个程序中,它们将被替换为某种空白,显示为问号或框。为什么jQuery get()去掉csv文件中的特殊字符?

我已经试过

$.ajaxSetup({ 
    dataType: "text" , 
    contentType: "text/plain; charset=utf-8" 
}); 

和其他变化。我的网页的文档类型是utf-8。我也试过8859-1。迄今没有任何工作。

编辑:手动放置字符到html或者是使用html实体代码工作正常。把它们放在javascript中也可以。唯一的问题是阅读这个CSV文件。

编辑2:试试这个。用它创建一个文本文件Öç¼»。然后创建一个网页是这样的...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> 
<script type="text/javascript"> 


    $.get("encodeme.txt", function(data){ 
      console.log(data); 
     }) 
</script> 

</head> 

<body> 
</body> 
</html> 

所有这一切都记录是一个空白和中国的特点:�缻。请注意,当我复制粘贴时,空格显示为问题标记。

+1

你试过序列化为JSON吗? – Justin

+2

你是如何设置文档类型的?你的服务器是输出一个'Content-type:text/plain; charset = utf-8'头也是如此?如果整个文件 - > web服务器 - >客户端的单个阶段没有设置为UTF-8,那么最终会出现错乱的文本。 –

+0

到目前为止,我只是在本地运行页面。 doctype是'<!DOCTYPE html PUBLIC“ - // W3C // DTD XHTML 1.0 Transitional // EN”“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>'该网页的字符集是'。 – Moss

回答

1

胡说!我应该早点看到这一点。问题在于csv文件被编码为ANSI。我简单地看过Notepad ++中的文件,应该已经注意到了那里的问题,但我第一次愚蠢地错过了它。我在Notepad ++中选择了Format> Convert to UTF-8,现在它工作正常。所以马克B最接近回答这个问题,尽管他没有因为某种原因而将它作为答案发布。现在,如何让OpenOffice正确编码我的文件...

+0

Duh,OOo询问我每次将电子表格保存为csv时使用哪种编码。如果我可以使它默认为UTF-8,那会很好。 – Moss

0

这个怎么样

$.ajaxSetup({ 
    dataType: "text" , 
    scriptCharset: "utf-8" , 
    contentType: "application/json; charset=utf-8" 
}); 

here

function char_convert(){ 
    var chars = ["©","Û","®","ž","Ü","Ÿ","Ý","$","Þ","%","¡","ß","¢","à","£","á","À","¤","â","Á","¥","ã","Â","¦","ä","Ã","§","å","Ä","¨","æ","Å","©","ç","Æ","ª","è","Ç","«","é","È","¬","ê","É","­","ë","Ê","®","ì","Ë","¯","í","Ì","°","î","Í","±","ï","Î","²","ð","Ï","³","ñ","Ð","´","ò","Ñ","µ","ó","Õ","¶","ô","Ö","·","õ","Ø","¸","ö","Ù","¹","÷","Ú","º","ø","Û","»","ù","Ü","@","¼","ú","Ý","½","û","Þ","€","¾","ü","ß","¿","ý","à","‚","À","þ","á","ƒ","Á","ÿ","å","„","Â","æ","…","Ã","ç","†","Ä","è","‡","Å","é","ˆ","Æ","ê","‰","Ç","ë","Š","È","ì","‹","É","í","Œ","Ê","î","Ë","ï","Ž","Ì","ð","Í","ñ","Î","ò","‘","Ï","ó","’","Ð","ô","“","Ñ","õ","”","Ò","ö","•","Ó","ø","–","Ô","ù","—","Õ","ú","˜","Ö","û","™","×","ý","š","Ø","þ","›","Ù","ÿ","œ","Ú"]; 
    var codes = ["&copy;","&#219;","&reg;","&#158;","&#220;","&#159;","&#221;","&#36;","&#222;","&#37;","&#161;","&#223;","&#162;","&#224;","&#163;","&#225;","&Agrave;","&#164;","&#226;","&Aacute;","&#165;","&#227;","&Acirc;","&#166;","&#228;","&Atilde;","&#167;","&#229;","&Auml;","&#168;","&#230;","&Aring;","&#169;","&#231;","&AElig;","&#170;","&#232;","&Ccedil;","&#171;","&#233;","&Egrave;","&#172;","&#234;","&Eacute;","&#173;","&#235;","&Ecirc;","&#174;","&#236;","&Euml;","&#175;","&#237;","&Igrave;","&#176;","&#238;","&Iacute;","&#177;","&#239;","&Icirc;","&#178;","&#240;","&Iuml;","&#179;","&#241;","&ETH;","&#180;","&#242;","&Ntilde;","&#181;","&#243;","&Otilde;","&#182;","&#244;","&Ouml;","&#183;","&#245;","&Oslash;","&#184;","&#246;","&Ugrave;","&#185;","&#247;","&Uacute;","&#186;","&#248;","&Ucirc;","&#187;","&#249;","&Uuml;","&#64;","&#188;","&#250;","&Yacute;","&#189;","&#251;","&THORN;","&#128;","&#190;","&#252","&szlig;","&#191;","&#253;","&agrave;","&#130;","&#192;","&#254;","&aacute;","&#131;","&#193;","&#255;","&aring;","&#132;","&#194;","&aelig;","&#133;","&#195;","&ccedil;","&#134;","&#196;","&egrave;","&#135;","&#197;","&eacute;","&#136;","&#198;","&ecirc;","&#137;","&#199;","&euml;","&#138;","&#200;","&igrave;","&#139;","&#201;","&iacute;","&#140;","&#202;","&icirc;","&#203;","&iuml;","&#142;","&#204;","&eth;","&#205;","&ntilde;","&#206;","&ograve;","&#145;","&#207;","&oacute;","&#146;","&#208;","&ocirc;","&#147;","&#209;","&otilde;","&#148;","&#210;","&ouml;","&#149;","&#211;","&oslash;","&#150;","&#212;","&ugrave;","&#151;","&#213;","&uacute;","&#152;","&#214;","&ucirc;","&#153;","&#215;","&yacute;","&#154;","&#216;","&thorn;","&#155;","&#217;","&yuml;","&#156;","&#218;"]; 
    for(x=0; x<chars.length; x++){ 
    for (i=0; i<arguments.length; i++){ 
    arguments[i].value = arguments[i].value.replace(chars[x], codes[x]); 
    } 
    } 
} 
+0

对不起,仍然是同样的问题。 – Moss

+0

@Moss我在以下链接测试http://dl.dropbox.com/u/21278577/csv.html – kst

+0

这是什么dropbox的东西?我已经有一个转换功能,但它甚至没有工作,因为它永远不会看到这些特殊字符。当jquery获得csv文件时,角色已经消失了。 – Moss

0

这是经典的字符编码(我认为)发现了这个功能。我从来没有依赖任何超过字母数字字符来显示。还有什么我逃脱。即使您的CSV回复了正确的字符,一旦您将它们打印到DOM中,它们仍然可能会发生损坏(我对于法文重音字符和属性文件经历了一次非常难以修复的体验,所以我不再用异国情调字符)。

在从A-Z,数字和标点符号的基本HTML分开的任何字符应该被转义:

&eacute; makes é 
&mdash; makes — 
+0

我不确定你说的是你的实际解决方案。你如何摆脱你的异国情调? – Moss

+0

对不起,看起来这个例子在我写的时候会变得很糟糕。我做了一个编辑:) – Art

+0

嗯,我当然不想手动键入这些代码,甚至不得不运行搜索并替换我的源文件。只要所有内容都正确编码和解码为UTF-8,一切都可以正常工作。 – Moss