如果打开xml文件,Emacs将显示中文字符

如果打开xml文件,Emacs将显示中文字符,emacs,encoding,Emacs,Encoding,我有一个xml文件。当我用Emacs打开它时,它会显示中文字符(见附件)。这种情况发生在装有Emacs和记事本的Windows 7 PC上,也发生在我的Windows XP上(见图A)。图B是A的hexl模式 如果我使用大学的Windows XP PC,用记事本打开文件,除了一个奇怪的字符外,没有汉字。我将其保存为txt文件,并通过电子邮件发送到Windows7 PC(见图C)。这个奇怪的字符被替换为“?”。(由于限制,我无法使用我同事的电脑,无法复制带有奇怪字符的记事本文件) 我的问题:XM

我有一个xml文件。当我用Emacs打开它时,它会显示中文字符(见附件)。这种情况发生在装有Emacs和记事本的Windows 7 PC上,也发生在我的Windows XP上(见图A)。图B是A的hexl模式

如果我使用大学的Windows XP PC,用记事本打开文件,除了一个奇怪的字符外,没有汉字。我将其保存为txt文件,并通过电子邮件发送到Windows7 PC(见图C)。这个奇怪的字符被替换为“?”。(由于限制,我无法使用我同事的电脑,无法复制带有奇怪字符的记事本文件)


我的问题:XML文件中似乎有一些字符会产生问题。我不知道该怎么应付。有人知道我如何处理这个问题吗?它与编码有关吗?感谢您的提示。

根据图B,该文件似乎是用big-endian和little-endian UTF-16混合编码的。首先是
fe ff
,它是big-endian UTF-16的字节顺序标记,XML声明(
Legocia的解决方案使用Emacs更改文件内编码的可能性解决了我的问题。另一种可能性是:

  • 切割要转换的零件
  • 粘贴到新文件并保存
  • 使用可以转换编码的编辑器打开它
  • 转换文件并保存它
  • 复制转换的字符串并将其添加(粘贴)到剪切要转换的零件的原始文件中
  • 在我的例子中,它可以使用Atom,但不能使用Notepad++

    PS:我使用这种方式的原因是Emacs无法再打开这种损坏的文件。我不知道为什么,但这是另一个问题


    编辑1:由于复制、粘贴和合并都很麻烦,我找到了使用emacs打开当前文件的解决方案:
    emacs-q xmlfile.xml
    。使用Legocia建议的emacs是修复此类文件的最佳方法。

    出于某种原因,emacs在xml文件编码属性中采用“UTF-16”作为big-endian,而Windows则采用“UTF-16”作为little endian(如从任务调度器导出时)。如果您编辑并保存xml文件,Emacs将在不知不觉中自动将LE转换为。您可以将鼠标悬停在左下角的“U”上查看当前编码。encoding=“UTF-16LE”或encoding=“UTF-16BE”将在保存后破坏文件(无BOM).我相信最新版本已经解决了这个问题

    <?xml version="1.0" encoding="UTF-16"?>
    <hi />
    
    
    
    非常感谢您的回答。第一次尝试(使用还原缓冲区)给了我很多^@,第二次尝试(重新编码区域)确实如此。这意味着我尝试从中获取一个未损坏的文件。由于您的输入,我可以向获取该文件的人提供一些提示。xml文件的制作人说,编码utf-16会造成此问题(正如Legocia观察到的)。更改为utf-8后,xml文件是可读的。显然,Encoding是一个主要问题。遗憾的是,在共享文件时,具有这种效果的东西没有通信。