我正在使用生成utf-8 XML文件XDocument.
XDocument xml_document = new XDocument(
new XDeclaration("1.0", "utf-8", null),
new XElement(ROOT_NAME,
new XAttribute("note", note)
)
);
...
xml_document.Save(@file_path);
Run Code Online (Sandbox Code Playgroud)
正确生成文件并使用xsd文件成功验证.
当我尝试将XML文件上传到在线服务时,该服务说我的文件是wrong at line 1; 我发现问题是由文件的第一个字节上的BOM引起的.
你知道为什么将BOM附加到文件中,如何在没有它的情况下保存文件?
如字节顺序标记维基百科文章中所述:
虽然Unicode标准允许使用UTF-8的BOM, 但它不需要或推荐它.字节顺序在UTF-8中没有意义,因此BOM仅用于将文本流或文件标识为UTF-8或者是从具有BOM的另一种格式转换的
这是一个XDocument问题还是我应该联系在线服务提供商的人员要求解析器升级?
我的程序必须读取使用各种编码的文件.它们可以是ANSI,UTF-8或UTF-16(大或小端).
当BOM(字节顺序标记)出现时,我没有问题.我知道文件是UTF-8还是UTF-16 BE或LE.
我想假设没有BOM文件是ANSI.但我发现我正在处理的文件经常缺少BOM.因此,没有BOM可能意味着该文件是ANSI,UTF-8,UTF-16 BE或LE.
当文件没有BOM时,扫描某些文件并最准确地猜测编码类型的最佳方法是什么?如果文件是ANSI,我希望接近100%的时间,如果是UTF格式,我希望接近100.
我正在寻找一种通用的算法来确定这一点.但实际上我使用Delphi 2009,它知道Unicode并且有一个TEncoding类,所以特定的东西将是一个奖励.
回答:
ShreevatsaR的回答让我在Google上搜索"通用编码检测器delphi",这让我感到惊讶,因为这个帖子在活着只有大约45分钟后被列为#1位置!这是快速googlebotting !! 同样令人惊讶的是Stackoverflow如此迅速地进入第一名.
Google的第二个条目是Fred Eaker关于字符编码检测的博客文章,列出了各种语言的算法.
我发现在该页面上提到了Delphi,它让我直接进入SourceForge的Free OpenSource ChsDet Charset Detector,这是用Delphi编写的,基于Mozilla的i18n组件.
太棒了!谢谢所有回复的人(全+1),谢谢ShreevatsaR,再次感谢Stackoverflow,帮助我在不到一个小时内找到答案!
有没有办法从UTF-8编码的文件中删除BOM?
我知道我的所有JSON文件都是用UTF-8编码的,但编辑JSON文件的数据输入人员用BOM将其保存为UTF-8.
当我运行我的Ruby脚本来解析JSON时,它失败并出现错误.我不想手动打开58+ JSON文件并在没有BOM的情况下转换为UTF-8.
非常直截了当的问题.有没有办法配置Eclipse以使用带有和不带BOM的utf-8编码的文本文件?
到目前为止,我已经使用eclipse和utf-8编码并且它可以工作,但是当我尝试编辑由包含BOM的另一个编辑器生成的文件时,Eclipse无法正确处理它,它在"处理器中显示了一个不可见的字符".开始文件(BOM).有没有办法让Eclipse了解带有BOM的utf-8编码文件?
在.NET中,我正在尝试使用Encoding.UTF8.GetString方法,它接受一个字节数组并将其转换为string.
看起来这种方法忽略了BOM(字节顺序标记),它可能是UTF8字符串的合法二进制表示的一部分,并将其作为字符.
我知道我可以TextReader根据需要使用a 来消化BOM,但我认为GetString方法应该是某种使我们的代码更短的宏.
我错过了什么吗?这是故意的吗?
这是一个复制代码:
static void Main(string[] args)
{
string s1 = "abc";
byte[] abcWithBom;
using (var ms = new MemoryStream())
using (var sw = new StreamWriter(ms, new UTF8Encoding(true)))
{
sw.Write(s1);
sw.Flush();
abcWithBom = ms.ToArray();
Console.WriteLine(FormatArray(abcWithBom)); // ef, bb, bf, 61, 62, 63
}
byte[] abcWithoutBom;
using (var ms = new MemoryStream())
using (var sw = new StreamWriter(ms, new UTF8Encoding(false)))
{
sw.Write(s1);
sw.Flush();
abcWithoutBom = ms.ToArray();
Console.WriteLine(FormatArray(abcWithoutBom)); // 61, 62, …Run Code Online (Sandbox Code Playgroud) 我正在使用nodeJS v0.8.6和本机库fs.这是我的代码:
var filesys = require('fs');
filesys.writeFile('test.txt', 'This is an example with accents : é è à ','utf8', function (err) {});
Run Code Online (Sandbox Code Playgroud)
问题是它在没有BOM的情况下写入utf8(我使用notepad ++来验证它),它在Windows上的wordpad中不起作用(重音没有很好地显示).问题是我需要womeone使用wordpad很好地阅读该文件.
如何将BOM添加到我的文件中?
使用utf8_encode时如何强制PHP添加BOM?
这是我想要做的:
$zip->addFromString($filename, utf8_encode($xml));
Run Code Online (Sandbox Code Playgroud)
不幸的是(对我来说),结果将不会在开头有BOM标记.
我需要有关从UTF-8文件中删除BOM的方法的建议,并创建其余xml文件的副本.
我的html文件中有BOM字符.我想删除它.我经常搜索并使用了很多脚本等等.但没有人工作.我也下载了notepad ++,但是在编码菜单中没有编码"UTF8 without BOM".如何删除该BOM字符?谢谢.

我正在编写一些评论过的PHP类,我偶然发现了一个问题.我的名字(对于@author标签)最终得到一个?(这是一个UTF-8字符,......和一个奇怪的名字,我知道).
即使我将文件保存为UTF-8,一些朋友报告说他们看到这个角色完全搞砸了(È™).添加BOM签名会消除此问题.但是这件事让我感到很麻烦,因为我不太了解它,除了我在维基百科上看到的以及其他一些类似的问题.
我知道它在文件的开头添加了一些东西,从我的理解它并没有那么糟糕,但我很担心,因为我读到的唯一有问题的场景涉及PHP文件.因为我正在编写PHP类来共享它们,所以100%兼容比在评论中使用我的名字更重要.
但我试图理解其含义,我应该使用它而不用担心吗?或者是否有可能造成损害的情况?什么时候?