标签: byte-order-mark

XDocument:将XML保存到没有BOM的文件

我正在使用生成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问题还是我应该联系在线服务提供商的人员要求解析器升级?

c# byte-order-mark linq-to-xml

38
推荐指数
2
解决办法
3万
查看次数

当BOM(字节顺序标记)丢失时,如何最好地猜测编码?

我的程序必须读取使用各种编码的文件.它们可以是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,帮助我在不到一个小时内找到答案!

delphi algorithm encoding byte-order-mark delphi-2009

29
推荐指数
2
解决办法
8026
查看次数

有没有办法从UTF-8编码的文件中删除BOM?

有没有办法从UTF-8编码的文件中删除BOM?

我知道我的所有JSON文件都是用UTF-8编码的,但编辑JSON文件的数据输入人员用BOM将其保存为UTF-8.

当我运行我的Ruby脚本来解析JSON时,它失败并出现错误.我不想手动打开58+ JSON文件并在没有BOM的情况下转换为UTF-8.

ruby byte-order-mark

29
推荐指数
4
解决办法
2万
查看次数

在Eclipse中使用utf-8文件

非常直截了当的问题.有没有办法配置Eclipse以使用带有和不带BOM的utf-8编码的文本文件?

到目前为止,我已经使用eclipse和utf-8编码并且它可以工作,但是当我尝试编辑由包含BOM的另一个编辑器生成的文件时,Eclipse无法正确处理它,它在"处理器中显示了一个不可见的字符".开始文件(BOM).有没有办法让Eclipse了解带有BOM的utf-8编码文件?

eclipse byte-order-mark utf-8

28
推荐指数
1
解决办法
1万
查看次数

Encoding.UTF8.GetString没有考虑Preamble/BOM

在.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)

.net unicode byte-order-mark character-encoding

25
推荐指数
3
解决办法
9281
查看次数

NodeJs - 如何使用BOM编写函数fs.writeFile?

我正在使用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添加到我的文件中?

byte-order-mark utf-8 node.js

25
推荐指数
1
解决办法
2万
查看次数

使用PHP在BOM中将字符串编码为UTF-8

使用utf8_encode时如何强制PHP添加BOM?

这是我想要做的:

$zip->addFromString($filename, utf8_encode($xml));
Run Code Online (Sandbox Code Playgroud)

不幸的是(对我来说),结果将不会在开头有BOM标记.

php byte-order-mark utf-8

24
推荐指数
1
解决办法
4万
查看次数

如何从Java中删除XML文件中的BOM

我需要有关从UTF-8文件中删除BOM的方法的建议,并创建其余xml文件的副本.

java byte-order-mark utf-8

23
推荐指数
1
解决办法
2万
查看次数

删除文件中的BOM字符

我的html文件中有BOM字符.我想删除它.我经常搜索并使用了很多脚本等等.但没有人工作.我也下载了notepad ++,但是在编码菜单中没有编码"UTF8 without BOM".如何删除该BOM字符?谢谢.

我的记事本++的截图

byte-order-mark notepad++

23
推荐指数
2
解决办法
3万
查看次数

PHP文件中的UTF-8 BOM签名

我正在编写一些评论过的PHP类,我偶然发现了一个问题.我的名字(对于@author标签)最终得到一个?(这是一个UTF-8字符,......和一个奇怪的名字,我知道).

即使我将文件保存为UTF-8,一些朋友报告说他们看到这个角色完全搞砸了(È™).添加BOM签名会消除此问题.但是这件事让我感到很麻烦,因为我不太了解它,除了我在维基百科上看到的以及其他一些类似的问题.

我知道它在文件的开头添加了一些东西,从我的理解它并没有那么糟糕,但我很担心,因为我读到的唯一有问题的场景涉及PHP文件.因为我正在编写PHP类来共享它们,所以100%兼容比在评论中使用我的名字更重要.

但我试图理解其含义,我应该使用它而不用担心吗?或者是否有可能造成损害的情况?什么时候?

php byte-order-mark utf-8 character-encoding

22
推荐指数
4
解决办法
4万
查看次数