首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP将Windows-1257编码为UTF-8错误

PHP将Windows-1257编码为UTF-8错误
EN

Stack Overflow用户
提问于 2018-08-15 21:57:37
回答 1查看 662关注 0票数 -1

我在将Windows-1257文件转换为UTF-8时遇到问题。原始文件的顶部有<?xml version="1.0" encoding="windows-1257"?>,我尝试使用以下代码对其进行转换:

代码语言:javascript
复制
iconv_set_encoding("internal_encoding", "UTF-8");
iconv_set_encoding("output_encoding", "ISO-8859-1");

$baltic_xml = file_get_contents($remote_file);
$unicode_xml = iconv("UTF-8", "UTF-8//IGNORE", $baltic_xml);
file_put_contents('data/rmtools/import/utf8/'.$files_single, $unicode_xml);

它将文件另存为UTF-8,但当我打开此文件时,我仍然收到以下错误:

UTF解析错误:输入不是正确的

-8,请指示编码!字节: 0x04 0x50 0x72 0x65

有没有合适的方法可以将它转换成可读的UTF-8,或者这意味着文件中仍然有一些符号不在UTF-8上?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-15 22:14:54

您正在尝试将UTF8转换为UTF8//IGNORE,这就是您收到该错误的原因。第一个参数是in_charset。iconv on PHP.net请更改

代码语言:javascript
复制
$unicode_xml = iconv("UTF-8", "UTF-8//IGNORE", $baltic_xml);

代码语言:javascript
复制
$unicode_xml = iconv("CP1257", "UTF-8//IGNORE", $baltic_xml);

然而,我个人建议你使用mb_*,因为iconv在很大程度上依赖于你的操作系统的iconv实现,并且可以显示不同操作系统之间的差异,另一方面,mb_*是纯粹的php扩展,并且是一致的。使您的代码使用mb_*将整体更改为

代码语言:javascript
复制
ini_set('mbstring.substitute_character','none'); //to remove the unknown characters, in place of //IGNORE in iconv
$baltic_xml = file_get_contents($remote_file);
$unicode_xml = iconv("UTF-8", "UTF-8//IGNORE", $baltic_xml);
$unicode_xml = utf8_encode($unicode_xml); //to correct utf-8 bytes
$unicode_xml = preg_replace('/[^\PC\s]/u', '', $unicode_xml); //to remove control chars in case it has
file_put_contents('data/rmtools/import/utf8/' . $files_single, $unicode_xml);

根据ISO CP-1257不是其中之一,您可以使用mb supported encodings -8859-13来代替,但是请注意,在某些图形字符中,它们之间存在一些不一致(然而,根据wikipedia,语言字符似乎是一致的)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51860141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档