2010-10-16 69 views
0

我正在解析一个巨大的xml文件,并且要对文件进行编码
<? XML版本= “1.0” 编码= “ISO-8859-1”?> **大胆XMLReader - 用utf字符获取问题

的数据库编码为UTF8之前保存任何东西DB
$ SQL我运行此查询='集名称“utf8”COLLATE“utf8_swedish_ci”';

的问题是什么,有时一些非标准的字符来在xml文件像
Lycka™:罗马
我知道,商标符号是从Windows-1252编码。

使用php的进出口。我试过utf8_encode。

这里保存在数据库alt text

这里是在浏览器中输出alt text

我希望它转换为UTF,这就是它

回答

0

我用这个代码,并使用PHP的罚款

function cp1252_to_utf8($str) 
{ 

     $cp1252_map = array(
       "\xc2\x80" => "\xe2\x82\xac", /* EURO SIGN */ 
       "\xc2\x82" => "\xe2\x80\x9a", /* SINGLE LOW-9 QUOTATION MARK */ 
       "\xc2\x83" => "\xc6\x92",  /* LATIN SMALL LETTER F WITH HOOK */ 
       "\xc2\x84" => "\xe2\x80\x9e", /* DOUBLE LOW-9 QUOTATION MARK */ 
       "\xc2\x85" => "\xe2\x80\xa6", /* HORIZONTAL ELLIPSIS */ 
       "\xc2\x86" => "\xe2\x80\xa0", /* DAGGER */ 
       "\xc2\x87" => "\xe2\x80\xa1", /* DOUBLE DAGGER */ 
       "\xc2\x88" => "\xcb\x86",  /* MODIFIER LETTER CIRCUMFLEX ACCENT */ 
       "\xc2\x89" => "\xe2\x80\xb0", /* PER MILLE SIGN */ 
       "\xc2\x8a" => "\xc5\xa0",  /* LATIN CAPITAL LETTER S WITH CARON */ 
       "\xc2\x8b" => "\xe2\x80\xb9", /* SINGLE LEFT-POINTING ANGLE QUOTATION */ 
       "\xc2\x8c" => "\xc5\x92",  /* LATIN CAPITAL LIGATURE OE */ 
       "\xc2\x8e" => "\xc5\xbd",  /* LATIN CAPITAL LETTER Z WITH CARON */ 
       "\xc2\x91" => "\xe2\x80\x98", /* LEFT SINGLE QUOTATION MARK */ 
       "\xc2\x92" => "\xe2\x80\x99", /* RIGHT SINGLE QUOTATION MARK */ 
       "\xc2\x93" => "\xe2\x80\x9c", /* LEFT DOUBLE QUOTATION MARK */ 
       "\xc2\x94" => "\xe2\x80\x9d", /* RIGHT DOUBLE QUOTATION MARK */ 
       "\xc2\x95" => "\xe2\x80\xa2", /* BULLET */ 
       "\xc2\x96" => "\xe2\x80\x93", /* EN DASH */ 
       "\xc2\x97" => "\xe2\x80\x94", /* EM DASH */ 

       "\xc2\x98" => "\xcb\x9c",  /* SMALL TILDE */ 
       "\xc2\x99" => "\xe2\x84\xa2", /* TRADE MARK SIGN */ 
       "\xc2\x9a" => "\xc5\xa1",  /* LATIN SMALL LETTER S WITH CARON */ 
       "\xc2\x9b" => "\xe2\x80\xba", /* SINGLE RIGHT-POINTING ANGLE QUOTATION*/ 
       "\xc2\x9c" => "\xc5\x93",  /* LATIN SMALL LIGATURE OE */ 
       "\xc2\x9e" => "\xc5\xbe",  /* LATIN SMALL LETTER Z WITH CARON */ 
       "\xc2\x9f" => "\xc5\xb8"  /* LATIN CAPITAL LETTER Y WITH DIAERESIS*/ 
     ); 

     return strtr(utf8_encode($str), $cp1252_map); 
} 


$str = cp1252_to_utf8(iconv("UTF-8", "ISO-8859-1//TRANSLIT", $str)); 
0

你尝试编码字符串UTF8保存前到db? 对于php有utf8_encode()函数,可能在您使用的语言中有类似的功能。

+0

林。雅,我试过utf8_encode。这里是什么保存在分贝“LyckaÂ:罗马”,当我尝试解码它,它显示为“Lycka:罗马” – 2010-10-16 12:48:04

+0

我已更新说明,请检查 – 2010-10-16 12:52:53

+0

我认为你将不得不使用多字节功能进行编码。使用mb_convert_encoding()http://php.net/manual/en/function.mb-convert-encoding.php – Nands 2010-10-17 10:50:21