<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>BOM</title>
	<atom:link href="https://www.hu365.dev/blog/tag/bom/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.hu365.dev</link>
	<description>Justin Woo（吴晓虎）的个人博客，生命不息，学习不止</description>
	<lastBuildDate>Sun, 18 Feb 2024 01:34:50 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.4.3</generator>

<image>
	<url>https://www.hu365.dev/wp-content/uploads/2022/10/cropped-logo-正矩形.blue_-32x32.png</url>
	<title>BOM</title>
	<link>https://www.hu365.dev</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>一个前端工程启动报错的问题</title>
		<link>https://www.hu365.dev/blog/2022/10/167/</link>
		
		<dc:creator><![CDATA[Justin]]></dc:creator>
		<pubDate>Sun, 30 Oct 2022 04:08:00 +0000</pubDate>
				<category><![CDATA[折腾笔记]]></category>
		<category><![CDATA[BOM]]></category>
		<category><![CDATA[Byte order mark]]></category>
		<category><![CDATA[UTF-8]]></category>
		<guid isPermaLink="false">https://www.hu365.dev/?p=167</guid>

					<description><![CDATA[相关参考链接： 一：启动报错 在一个协作的前端工程，拉取代码之后，启动工程出现如下错误： 从错误日志看，是第一个字符JSON转换时就抛出错误 对比相关代码，并没有发现特殊的字符，甚至全选粘贴改成相同内容，仍然提示相同错误直接替换文件，或者回退到老版本又正常 于 <a href="https://www.hu365.dev/blog/2022/10/167/" class="cosmoswp-btn">阅读更多</a>]]></description>
										<content:encoded><![CDATA[
<p>相关参考链接：</p>



<ul>
<li><a href="https://zh.wikipedia.org/wiki/%E4%BD%8D%E5%85%83%E7%B5%84%E9%A0%86%E5%BA%8F%E8%A8%98%E8%99%9F">字节顺序标记 &#8211; 维基百科，自由的百科全书 (wikipedia.org)</a></li>



<li><a href="https://www.w3.org/International/questions/qa-byte-order-mark">The byte-order mark (BOM) in HTML (w3.org)</a></li>
</ul>



<h2 class="wp-block-heading">一：启动报错</h2>



<p>在一个协作的前端工程，拉取代码之后，启动工程出现如下错误：</p>



<figure class="wp-block-image size-large"><a href="https://www.hu365.dev/wp-content/uploads/2022/11/1611290602-1-jpg.webp"><img data-dominant-color="313338" data-has-transparency="false" style="--dominant-color: #313338;" fetchpriority="high" decoding="async" width="1024" height="365" src="https://www.hu365.dev/wp-content/uploads/2022/11/1611290602-1-1024x365.webp" alt="" class="not-transparent wp-image-178" srcset="https://www.hu365.dev/wp-content/uploads/2022/11/1611290602-1-1024x365.webp 1024w, https://www.hu365.dev/wp-content/uploads/2022/11/1611290602-1-300x107.webp 300w, https://www.hu365.dev/wp-content/uploads/2022/11/1611290602-1-768x274.webp 768w, https://www.hu365.dev/wp-content/uploads/2022/11/1611290602-1-jpg.webp 1093w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">看起来是JSON转换报错</figcaption></figure>



<p>从错误日志看，是第一个字符<code>JSON</code>转换时就抛出错误</p>



<p>对比相关代码，并没有发现特殊的字符，甚至全选粘贴改成相同内容，仍然提示相同错误<br>直接替换文件，或者回退到老版本又正常</p>



<p>于是再对比差异，发现：</p>



<figure class="wp-block-image size-full"><a href="https://www.hu365.dev/wp-content/uploads/2022/11/微信图片_20221110112037-jpg.webp"><img data-dominant-color="33353b" data-has-transparency="false" style="--dominant-color: #33353b;" decoding="async" width="695" height="183" src="https://www.hu365.dev/wp-content/uploads/2022/11/微信图片_20221110112037-jpg.webp" alt="" class="not-transparent wp-image-179" srcset="https://www.hu365.dev/wp-content/uploads/2022/11/微信图片_20221110112037-jpg.webp 695w, https://www.hu365.dev/wp-content/uploads/2022/11/微信图片_20221110112037-300x79.webp 300w" sizes="(max-width: 695px) 100vw, 695px" /></a></figure>



<p>编码没问题，但多出来的 BOM是什么</p>



<h2 class="wp-block-heading">二：<strong>字节顺序标记</strong></h2>



<h3 class="wp-block-heading">2.1：BOM（byte-order mark）</h3>



<blockquote class="wp-block-quote">
<p>是位于码点<code>U+FEFF</code>的统一码字符的名称。当以<code>UTF-16</code>或<code>UTF-32</code>来将<code>UCS/</code>统一码字符所组成的字符串编码时，这个字符被用来标示其字节序。它常被用来当做标示文件是以<code>UTF-8</code>、<code>UTF-16</code>或<code>UTF-32</code>编码的标记。</p>
<cite>中文维基百科</cite></blockquote>



<blockquote class="wp-block-quote">
<p>【谷歌翻译】</p>



<p>在 1993 年初引入<code>UTF-8</code>之前，传输<code>Unicode</code>文本的预期方式是使用 16 位代码单元，使用称为<code>UCS-2</code>的编码，后来扩展到<code>UTF-16</code>。16 位代码单元可以用两种方式表示为字节：最高有效字节在前（<code>big-endian</code>）或最低有效字节在前（<code>little-endian</code>）。为了传达正在使用的字节顺序，在流的开头使用了<code>U+FEFF</code>（字节顺序标记）作为幻数，该幻数在逻辑上不是流所表示的文本的一部分。</p>
<cite>W3C</cite></blockquote>



<h3 class="wp-block-heading">2.2：UTF-8 中的 BOM</h3>



<blockquote class="wp-block-quote">
<p>在<code>UTF-8</code>中，虽然在<code>Unicode</code>标准上允许字节顺序标记的存在，但实际上并不一定需要。<code>UTF-8</code>编码过的字节顺序标记则被用来标示它是<code>UTF-8</code>的文件。它只用来标示一个<code>UTF-8</code>的文件，而不用来说明字节顺序。</p>



<p>许多<code>Windows</code>程序（包含记事本）会需要添加字节顺序标记到<code>UTF-8</code>文件，否则将无法正确解析编码，而出现乱码。然而，在类<code>Unix</code>系统中，这种做法则不被建议采用。</p>



<p><code>Unicode</code>标准允许在<code>UTF-8</code>中使用<code>BOM</code>，但并不要求或推荐使用它。字节顺序在<code>UTF-8</code>中没有任何意义，所以它在<code>UTF-8</code>中的唯一用途是在开始时发出信号，表明文本流是用<code>UTF-8</code>编码的，或者表明它是从包含可选<code>BOM</code>的文本流转换到<code>UTF-8</code>的。</p>
<cite>中文维基百科</cite></blockquote>



<blockquote class="wp-block-quote">
<p>【谷歌翻译】</p>



<p>在<code>UTF-8</code>编码中，<code>BOM</code>的存在不是必需的，因为与<code>UTF-16</code>编码不同，字符中没有替代的字节序列。但是，<code>BOM</code>仍可能出现在<code>UTF-8</code>编码文本中，或者作为编码转换的副产品，或者因为它是由编辑器添加以将内容标记为<code>UTF-8</code>。在这种情况下，<code>BOM</code>通常称为<code>UTF-8</code>签名。</p>
<cite>W3C</cite></blockquote>



<h3 class="wp-block-heading">2.3：JSON 中的 BOM</h3>



<p>由于在文件前插入了不可见但又实际存在的字符（<code>\UFEFF</code>），导致<code>JSON</code>无法正常解析字符串<br>这就是问题所在</p>



<h2 class="wp-block-heading">三：解决方法</h2>



<p>本人使用<code>jetbrains</code>系列软件开发，软件中自带“添加”/“移除”<code>BOM</code>的选项<br>不过这个问题也不是很罕见的问题了，估摸着大部分编辑器应该都自带该选项功能</p>



<figure class="wp-block-image size-full"><a href="https://www.hu365.dev/wp-content/uploads/2022/11/微信图片_20221110121042-jpg.webp"><img data-dominant-color="3f3f43" data-has-transparency="false" style="--dominant-color: #3f3f43;" decoding="async" width="528" height="494" src="https://www.hu365.dev/wp-content/uploads/2022/11/微信图片_20221110121042-jpg.webp" alt="" class="not-transparent wp-image-180" srcset="https://www.hu365.dev/wp-content/uploads/2022/11/微信图片_20221110121042-jpg.webp 528w, https://www.hu365.dev/wp-content/uploads/2022/11/微信图片_20221110121042-300x281.webp 300w" sizes="(max-width: 528px) 100vw, 528px" /></a></figure>



<p></p>



<p></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
