当前位置: 首页 > 面试题库 >

错误:“输入的UTF-8输入不正确,表示编码!” 使用PHP的simplexml_load_string

谷梁涵忍
2023-03-14
问题内容

我收到错误消息:

parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xED 0x6E 0x2C 0x20

尝试使用simplexml_load_string第三方来源处理XML响应时。原始XML响应确实声明了内容类型:

<?xml version="1.0" encoding="UTF-8"?>

但是,似乎XML并不是真正的UTF-8。XML内容的语言是西班牙语,并且包含类似DublínXML的单词。

我无法让第三方来整理他们的XML。

如何预处理XML并解决编码不兼容的问题?

有没有一种方法可以检测XML文件的正确编码?


问题答案:

您的0xED 0x6E 0x2C
0x20字节对应于ISO-8859-1中的“ín”,因此您的内容似乎在ISO-8859-1中,而不是UTF-8。告诉您的数据提供商并请他们修复它,因为如果它对您不起作用,那么对其他人也可能不起作用。

现在有几种解决方法,只有 在无法正常加载XML
时才应使用。其中之一将是使用utf8_encode()。不利之处在于,如果该XML同时包含有效的UTF-8和某些ISO-8859-1,则结果将包含mojibake。或者,您可以尝试使用iconv()或mbstring
将字符串从UTF-8转换为UTF-8 ,希望他们会为您解决。(它们不会,但是您至少可以忽略无效字符,以便可以加载XML)

或者,您可以走很长的路,自己验证/修复序列。这将需要一段时间,具体取决于您对UTF-8的熟悉程度。也许有图书馆可以做到这一点,尽管我什么都不知道。

无论哪种方式,都请通知数据提供者他们正在发送无效数据,以便他们可以对其进行修复。

这是部分修复。它绝对不会修复所有问题,但会修复其中的一些问题。希望您能满意为止,直到您的提供者修复他们的东西为止。

function fix_latin1_mangled_with_utf8_maybe_hopefully_most_of_the_time($str)
{
    return preg_replace_callback('#[\\xA1-\\xFF](?![\\x80-\\xBF]{2,})#', 'utf8_encode_callback', $str);
}

function utf8_encode_callback($m)
{
    return utf8_encode($m[0]);
}


 类似资料:
  • 问题内容: 我正在尝试使用DOMDocument解析一些HTML,但是当我这样做时,我突然失去了编码(至少这对我来说是这样)。 这段代码的结果是我得到了一堆不是日语的字符。但是,如果我这样做: 正确显示。我尝试过saveHTML和saveXML,但都无法正确显示。我正在使用PHP 5.3。 我所看到的: 应该显示什么: 编辑:我已经将代码简化为五行,因此您可以自己对其进行测试。 这是返回的html

  • 编写了以下两个函数,用于存储和检索任何Python(内置或用户定义)对象,并结合使用json和jsonickle(在2.7中) 我还没有用用户定义的对象测试过这两个函数,但是当我试图保存()一个内置的字符串字典时,(即。{'Adam': 'Age 19 ',' Bill ',' Age 32'}),并且我检索相同的文件,我得到相同的unicode字典,{u'Adam': u'Age 19 ',u'

  • 我有一个。csv文件,以西班牙语编写,因此它具有特殊字符,如ñ,á,é,í,ó,ú。因此,如果我在记事本中打开它,我可以看到所有正确书写的字符,并且我已经用UTF-8编码保存了文件。但是,当我打开RStudio并使用以下方式导入数据时: 我得到了所有数据集,但编码不正确,即: 应包括以下内容: 我已经尝试了所有的方法,我不知道还能做什么,因为我已经检查过R是否使用UTF-8编码,文件是否以相同的方

  • 嘿,我必须使用 JOptionPane 向用户询问购买金额,如果他们输入超过小数点后两位、任何内容、字符或多于小数点,程序必须显示错误消息并停止。 我该怎么做? 我不希望有人为我编写程序,只是一个解释我将如何做的链接 如果用户输入“12.526”或“”或“1.3.25”或“abc”,我希望程序显示错误消息并停止。 由于这似乎是一个令人困惑的问题,或者我问错了,这些是我的老师的指示: 程序必须要求用

  • 问题内容: 我一直在尝试和阅读Internet上的大量资源,试图找到一种从X显示器获取UTF-8键盘(组合)输入的方法。但是我无法使其工作。 我已经尝试过此链接中的示例代码(例如11-4),但没有成功。 我还写了一个简单的示例(如下),试图使其工作。我的简单测试用例是打印一个“é”,这是通过先键入“ a”然后再键入e来实现的。 怎么了? 谢谢, 这是我的示例: 问题答案: 您必须这样做: 在您的事

  • 所以我一直在开发一个基本的Java应用程序,它通过缓冲读取器从文本文件中读取数据,并将其填充到swing JTable中。 代码在NetBeans中运行良好,特殊字母在控制台和表单本身中都能完美显示。 问题是在我构建项目并将其放在我的硬盘驱动器的某个地方并通过生成的. jar运行它之后,它会弄乱文件中的读取,并且出现奇怪的字母...... 我试过这些: ... 和 我希望你能帮助我。