首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

UTF8最好不要带BOM,附许多经典评论

UTF-8」和「带 BOM UTF-8区别就是没有 BOM。即文件开头有没有 U+FEFF。 UTF-8 网页代码不应使用 BOM,否则常常会出错。...通常BOM是用来标示Unicode纯文本字节流,用来提供一种方便方法让文本处理程序识别读入.txt文件是哪个Unicode编码UTF-8,UTF-16BE,UTF-16LE)。...这时候出现了新编码方式,unicode编码方式,想将编码统一,所以规定了每个字符对应unicode码。 1、很多文件都是ascii编码如果unicode 太浪费。...其次,如果我们要读取三方文件并以UTF-8格式解析时候一定要注意去判断这个文件是否BOM,例如:sql文件解析执行。...或许是因为程序编写者个人原因,也许是考虑到效率,很多程序无法正确区分一个utf-8文件是否bom,所以导致了各种乱码出现。 个人不想说哪个是标准,也不想用语言去攻击哪个公司或团体。

3.2K20

微软平台文件编码兼容Unix不生成BOM

通常BOM是用来标示Unicode纯文本字节流,用来提供一种方便方法让文本处理程序识别读入.txt文件是哪个Unicode编码UTF-8,UTF-16BE,UTF-16LE)。...A: UTF-8 编码文件可以分为no BOMBOM两种格式。 何谓BOM?...这个标记是可选,因为UTF8字节没有顺序,所以它可以被用来检测一个字节流是否UTF-8编码。微软做这种检测,但有些软件不做这种检测,而把它当作正常字符处理。...也就是说一个UTF-8文件可能有BOM,也可能没有BOM,那么怎么区分呢?三种方法。1,用UltraEdit-32打开文件,切换到十六进制编辑模式,察看文件头部是否有EF BB BF。...3,用Windows记事本打开,选择 “另存为”,看文件默认编码UTF-8还是ANSI,如果是ANSI则不带BOM

1.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

C++字符编码于MSVC和GCC之间区别

执行字符集(the execution character set)   可执行程序内保存是何种编码(程序执行时内存中字符串编码)   C++98问题: 既没有规定源码字符集,也没有规定执行字符集...要想跨平台,必须确保这两个字符集都是“确定”,而能胜任该任务字符集,似乎理想只能是…   UTF-8方案    如果我们将源码保存成utf8,执行字符集也选为utf8,那么天下将太平了。...使用非ASCII字符源码文件也就可以在不同国家用户间无障碍流通了 ;-).   源码保存成UTF-8没有什么困难,但是,执行字符集需要是UTF-8。...不知道源文件编码如何转换  于是:  MSVC说:源码文件必须有BOM,不然认为你是本地locale编码  GCC说:认为就是utf8编码,除非通过命令行通知其他编码  在C++11标准下...,对源码编码 简单处理办法还是,使用带BOMUTF8保存。

1K00

中文乱码问题-1

执行字符集(the execution character set) 可执行程序内保存是何种编码(程序执行时内存中字符串编码) C++98问题: 既没有规定源码字符集,也没有规定执行字符集 这个...要想跨平台,必须确保这两个字符集都是“确定”,而能胜任该任务字符集,似乎理想只能是… UTF-8方案 如果我们将源码保存成UTF-8,执行字符集也选为UTF-8,那么天下将太平了。...使用非ASCII字符源码文件也就可以在不同国家用户间无障碍流通了 :)。 源码保存成UTF-8没有什么困难,但是,执行字符集需要是UTF-8。没那么简单!...对GCC来说,这个问题很简单(默认编码选项足够了): 只要源码文件保存成UTF-8即可(带或不带BOM均可) 早期GCC不接收带BOMUTF-8源码文件,现在,至少在GCC4.6中,这一限制不再存在...不知道源文件编码如何转换 于是: MSVC说:源码文件必须有BOM,不然认为你是本地locale编码 GCC说:认为就是utf8编码,除非通过命令行通知其他编码 在C++11标准下,对源码编码

1.3K20

字符编码

在DBCS系列标准里,最大特点是两字节长汉字字符和一字节长英文字符并存于同一套编码方案里,因此他们写程序为了支持中文处理,必须要注意字串里每一个字节值,如果这个值是大于127,那么就认为一个双字节字符集里字符出现了...②Linux/UNIX 并没有使用 BOM,因为它会破坏现有的 ASCII 文件语法约定。 ③不同编辑工具对BOM处理也各不相同。...使用Windows自带记事本将文件保存为UTF-8编码时候,记事本会自动在文件开头插入BOM(虽然BOMUTF-8来说并不是必须)。而其它很多编辑器用不用BOM可以选择。...(3)BOM与XML  XML解析读取XML文档时,W3C定义了3条规则: ①如果文档中有BOM,就定义了文件编码; ②如果文档中没有BOM,就查看XML声明中编码属性; ③如果上述两者都没有,就假定...这就是BOM。 (4)UTF-8  用记事本另存为时,编码选择“UTF-8”,用EmEditor打开该文件,发现编码格式是:UTF-8(有签名)。

2.1K40

C# 判断文件编码

最近在做一个项目,这个项目可以把我们文件夹里所有文本,判断他们是什么编码如果不是用户规定编码,那么就告诉用户,是否要把它规范为设置编码。...故事 编码问题是历史带来,所以需要说下文件编码历史。 一开始程序认为 Ascii 就可以表达一切,于是一开始就只有 Ascii 编码。...我们常用编码UTF-8 和 GBK ,所以这就是我们重点关注编码,可惜现在没有一个好办法区别 UTF-8 和 GBK 。...如果是带 BOM 文件,带 BOM 就是带签名,我们可以看到在 VisualStudio 文件-高级保存 有 UTF-8 带签名和 UTF-8 编码。 ? ?...其实找了现在很多大神博客,他们都认为这个是没有一个可行方法,精确判断。所以我们只能通过一个近似的方法来判断。

3.1K20

烫烫烫锟斤拷是什么_卡锟

这个标记是可选,因为UTF8字节没有顺序,所以它可以被用来检测一个字节流是否UTF-8编码。...~BOM就是把一个Unicode保留字符U+FEFF,按照文件存储者编码方式编码后,塞到文件内容最前边。...这样用不同Unicode编码去解析文件头,就可以得知文件编码方式和大小端顺序。结果就是文件头部多出来了两三个字节。 有了BOM所有的程序都必须为BOM作出修改,这无疑是一个“大折腾”行为。...所以一般不认为BOM是个好主意。BOM引发问题,能想起来两个: PHP无法指定header(因为有BOM相当于开启输出) UNIX可执行脚本Shabang标记(#!)...不能识读 任何时候都采用无BOMUTF-8编码Unicode,绝对是一个引发麻烦最少最实用策略。UTF-8Unicode最佳实践,没有之一。

54820

C# 判断文件编码

最近在做一个项目,这个项目可以把我们文件夹里所有文本,判断他们是什么编码如果不是用户规定编码,那么就告诉用户,是否要把它规范为设置编码。...故事 编码问题是历史带来,所以需要说下文件编码历史。 一开始程序认为 Ascii 就可以表达一切,于是一开始就只有 Ascii 编码。...我们常用编码UTF-8 和 GBK ,所以这就是我们重点关注编码,可惜现在没有一个好办法区别 UTF-8 和 GBK 。...如果是带 BOM 文件,带 BOM 就是带签名,我们可以看到在 VisualStudio 文件-高级保存 有 UTF-8 带签名和 UTF-8 编码。...其实找了现在很多大神博客,他们都认为这个是没有一个可行方法,精确判断。所以我们只能通过一个近似的方法来判断。

86740

vs2015:utf-8选项解决UTF-8 without BOM 源码中文输出乱码问题

反复查找原因,最后发现是两个源码编码格式不同。虽然都是UTF-8,但是能正确输出中文源码文件是带BOM,另一个是不带BOM。...参考这个篇文章《MSVC中C++ UTF8中文编码处理探究》搞明白了MSVC对于不带BOMUTF-8文件,默认会根据本地locale设置来决定文件编码(对于简体中文系统,就是GBK)。...所以会对于UTF-8 without BOM代码文件输出中文就是乱码。对于UTF-8 with BOM文件,会正确将其按照UTF-8来识别。...根据这个说明,这个指令似乎是VS2015才有的(电脑没有别的版本MSVC所以没办法验证VS2015之前版本是否支持这个指令),但是在Visual Studio 2015 Update 2版本就废弃了...主要原因是linux下编译器不支持UTF-8 with BOM源码编译,其实如果项目没有跨平台编译要求,并不一定要将源码保存为UTF-8 without BOM格式。

6.2K20

win10 uwp 读取文本GBK错误

使用NotePad记事本保存文件,格式ASCII,用微软示例打开文件方式读取,出现错误 “在多字节目标代码页中,没有Unicode 字符可以映射到字符” 英文 No mapping for the...,但是以前就是这样写,可以读取到?原因是因为文本保存为 查了一下WPF使用默认可以读,原因是默认 WPF 编码读取是 GBK 所以这时就可以读取,但是在 UWP 是没有 GBK ,默认也不是。...默认.net core 不包含除了 代码页为 28591 和 Unicode(utf-8,utf-16) 之外其他编码,但是标准 .net Framework 开发程序中使用其他编码,而且可以在标准...windows 程序支持其他编码,详细请看CodePagesEncodingProvider 也就是我们保存时GBK,查询到Encoding没有GBK,没有默认,所以看起来这个问题不是简单就可以通过...我们可以Catch,用GBK读文本,这样如果读取错误就是文件错了。

1.3K10

UNICODE,GBK,UTF-8

详细就见下面转这篇文章. 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词 这是一篇程序员写给程序趣味读物。...很早前就发现UnicodeUnicode big endian和UTF-8编码txt文件开头会多出几个字节,分别是FF、FE(Unicode),FE、FF(Unicode big endian)...对于Unicode(UCS2)、GBK、UTF-8这些编码方式,原来就了解。但这个程序有些糊涂,想不起来UTF-16和UCS2有什么关系。...读者可以用记事本测试一下我们编码是否正确。需要注意,UltraEdit在打开utf-8编码文本文件时会自动转换为UTF-16,可能产生混淆。你可以在设置中关掉这个选项。...所以如果接收者收到以EF BB BF开头字节流,就知道这是UTF-8编码了。 Windows就是使用BOM来标记文本文件编码方式

2.6K20

QT 应用程序在 Windows 系统上出现中文乱码

情况是这样,QT 代码是别人,别人给可执行程序没有中文乱码问题。但是这个 QT 项目在这边编译,编出来程序就有乱码问题。...这里提一下,BOM 代表 Byte order mark,也就是字节序标记,有2个作用: 1. 说明字符流属于Unicode编码,且表明了编码方式 2....但在 QT 应用程序乱码问题上,和 utf8 BOM没有什么关系,是否BOM 只是文件头几个字节差异,要么直接出错,不会引起乱码。...UTF-8编码(是任何平台、任何语言都可以使用跨平台字符集),MSVC编译器虽然可以正常编译带BOMUTF-8编码文件,但是生成可执行文件编码是 Windows 本地字符集,比如 GBK2312...也就是在可执行文件中,字符串“测试”是以GBK2312编码,而可执行程序执行到这条语句时,对这个字符串却是以UTF-8解码,这样就会出现乱码。

25010

python encode和decode函数说明

('utf-16')#转换为utf-16编码字符串str1 python给我们提供了一个包codecs进行文件读取,这个包中open()函数可以指定编码类型: import codecs f =...C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行 处理。输入输出字符流开始和结束只由程序控制而不受物理符号(如回车符)控制。 因此也把这种文件称作“流式文件”。...对于Unicode(UCS2)、 GBK、UTF-8这些编码方式,原来就了解。但这个程序有些糊涂,想不起来UTF-16和UCS2有什么关系。...而目前UCS-4规范中还没有任何字符被分配在BMP之外。 4、UTF编码 UTF-8就是以8位为单元对UCS进行编码。...所以如果接收者收到以EF BB BF开头字节流,就知道这是UTF-8编码了。 Windows就是使用BOM来标记文本文件编码方式

1.1K30

Unicode编码

很早前就发现UnicodeUnicode big endian和UTF-8编码txt文件开头会多出几个字节,分别是FF、FE(Unicode),FE、FF(Unicode big endian)...对于Unicode(UCS2)、GBK、UTF-8这些编码方式,原来就了解。但这个程序有些糊涂,想不起来UTF-16和UCS2有什么关系。   ...那么写到文件里时,究竟是将6C写在前面,还是将49写在前面?如果将6C写在前面,就是big endian。还是将49写在前面,就是little endian。   ...而目前UCS-4规范中还没有任何字符被分配在BMP之外。 4、UTF编码   UTF-8就是以8位为单元对UCS进行编码。...所以如果接收者收到以EF BB BF开头字节流,就知道这是UTF-8编码了。   Windows就是使用BOM来标记文本文件编码方式

1.3K10

SVN权限管理(下)

Michael 心想,还好这两天刚了解了一些与 unicode 编码相关知识,于是微笑地回答:“当然可以,你明天下午就可以看到中文目录名称了。”...BOM是 Byte Order Mark 缩写,指 UNICODE文件头部用于指明高低字节排列顺序几个字符,通常是 FF FE ,而将之用 UTF-8 编码之后,就是 EF BB BF 。...由于 BOM 会给文本处理带来很多难题,所以现在很多软件都要求使用不带 BOM UTF-8 文件,特别是一些处理文本软件,如 PHP、 UNIX 脚本文件等,svn 也是如此。...新版本 UltraEdit 提供了选项,允许用户选择是否需要 BOM,而老版本不会添加 BOM。请各位查看一下自己常用编辑器说明文件,看看它是否支持这个功能。...对于已经存在 BOM UTF-8 文件,比如说就是微软“记事本”弄出来,我们可以利用UltraEdit 来将 BOM 去掉。

94630

UNICODE,GBK,UTF-8区别

详细就见下面转这篇文章. 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词 这是一篇程序员写给程序趣味读物。...对于Unicode(UCS2)、GBK、UTF-8这些编码方式,原来就了解。但这个程序有些糊涂,想不起来UTF-16和UCS2有什么关系。...读者可以用记事本测试一下我们编码是否正确。需要注意,UltraEdit在打开utf-8编码文本文件时会自动转换为UTF-16,可能产生混淆。你可以在设置中关掉这个选项。...所以如果接收者收到以EF BB BF开头字节流,就知道这是UTF-8编码了。 Windows就是使用BOM来标记文本文件编码方式。...有的HTML文件作者,特别是英文作者,认为世界上所有人都使用英文,在文件中不指定charset。如果他使用了0x80-0xff之间字符,中文Windows又按照缺省GBK去解释,就会出现乱码。

3K21

UTF—8与UTF—8(无bom)格式相比有什么不同

UTF-8编码文件中,BOM占三个字节。如果用记事本把一个文本文件另存为UTF-8编码方式的话,用UE打开这个文件,切换到十六进制编辑状态就可以看到开头FFFE了。...这是个标识UTF-8编码文件好办法,软件通过BOM来识别这个文件是否UTF-8编码,很多软件还要求读入文件必须带BOM。可是,还是有很多软件不能识别BOM。...PHP在设计时就没有考虑BOM问题,也就是说他不会忽略UTF-8编码文件开头BOM那三个字符。 由于必须在在Bo-Blogwiki看到,同样使用PHPBo-Blog也一样受到BOM困扰。...,测试后问题依旧; 后来在网上google了一下,最终发现问题是由于Utf-8编码格式文件所导致,如果Utf-8文件被记事本、DW工具编辑过,但没有注意处理方式,那么会自动在...它常被用来当做标示文件是以UTF-8、UTF-16或UTF-32编码记号。说白了就是位于文本最前面用来标识该unicode编码文本内容是以UTF-8、UTF-16或UTF-32编码

8.2K42

UTF8最好不要带BOM

所以不含 BOM UTF-8 才是标准形式,在 UTF-8 文件中放置 BOM 主要是微软习惯(顺便提一下:把带有 BOM 小端序 UTF-16 称作「Unicode」而又不详细说明,这也是微软习惯...微软在 UTF-8 中使用 BOM 是因为这样可以UTF-8 和 ASCII 等编码明确区分开,但这样文件在 Windows 之外操作系统里会带来问题。 首先,BOM是啥。...通常BOM是用来标示Unicode纯文本字节流,用来提供一种方便方法让文本处理程序识别读入.txt文件是哪个Unicode编码UTF-8,UTF-16BE,UTF-16LE)。...而引入Unicode时Windows设计者又希望能在用户不注意情况下同时兼容Unicode和非Unicode(Multiple byte)文本文件,就只能借助这种小trick了。...其实很多现代脚本语言,比如Python,其解释器本身都是能处理BOM,但是shell卡在这里,没办法,只能躺着也中枪。

1.2K60

刨根究底字符编码之十一——UTF-8编码方式与字节序标记

为满足基于ASCII、面向字节字符处理需要,Unicode标准中定义了UTF-8编码方式。...f)  由于UTF-8编码没有状态,从UTF-8字节流任意位置开始可以有效地找到一个字符起始位置,字符边界很容易界定、检测出来,所以具有很好“自同步性”。...(Windows系统中BOM有时也用在UTF-8编码文本文件开头,虽然UTF-8编码不存在字节序问题,但Windows却用BOM来表明该文本文件编码格式为UTF-8,看起来这有点“多此一举”,其具体原因详见后文...UTF-8编码本身没有字节序问题,但仍然有可能会用到BOM——有时被用来标示某文本是UTF-8编码格式文本;再强调一遍:在UFT-8编码格式文本中,如果添加了BOM,则只用它来标示该文本是由UTF...许多Windows程序(包含记事本)会添加BOMUTF-8编码格式文件中(至于为什么要添加BOM,可参看后续《微软跟联通有仇?》一文)。然而,在类Unix系统中,这种作法则不被建议采用。

1.4K30

精述字符编码

那么写到文件里时,究竟是将6C写在前面,还是将49写在前面?如果将6C写在前面,就是Big Endian。如果将49写在前面,就是Little endian。...因此字符”ZERO WIDTH NO-BREAK SPACE”又被称作BOMUTF-8不需要BOM来表明字节顺序,但可以BOM来表明编码方式。UTF-8编码BOM是EF BB BF。...所以如果接收者收到以EF BB BF开头字节流,就知道这是UTF-8编码了。Windows就是使用BOM来标记文本文件编码方式。通过它基本能确定编码格式和字节序。UTF相关编码BOM如下。...如果没有BOM只能靠猜了。软件读入文件可以所有编码都试一下,看哪个像。另外,BOM只针对Unicode系列编码,ANSI通通不使用BOM。很显然,没有BOM难免偶然猜错。...有了BOM,于是很多文本编辑软件就会有UTF-8 without BOM,UTF-16 without BOM编码格式选项。如果不提BOM,究竟有BOM还是没有BOM

1.4K32
领券