2015-01-03 58 views
0

當你在寫網頁時,如果你使用UTF-8,什麼是最好的
練習 - 將頁面編碼爲UTF-8,帶或不帶BOM?帶或不帶BOM的UTF-8?

那麼......對於任何類型的文件,
不僅適用於網頁(即不僅適用於HTML文件),那麼答案是什麼?

+0

爲什麼要使用UTF-8中的BOM?它沒有字節順序,因此沒有用處,而是表示UTF流的開始。 – initramfs

+0

@CPUTerminator「但是表示一個UTF流的開始」>>>嗯,是的,我只是想着那個方向,就是爲了這個目的。 –

回答

1

從Unicode的website

問:一個UTF-8的數據流可以包含BOM字符(以UTF-8型)?如果是的話,那麼我是否仍然可以假設其餘的UTF-8字節是按大端順序排列的?答:是的,UTF-8可以包含BOM。然而,對於字節流的字節順序來說沒有區別。 UTF-8總是具有相同的字節順序。最初的BOM僅用作簽名 - 表示其他未標記的文本文件是UTF-8。請注意,有些UTF-8編碼數據的收件人不期望有物料清單。在8位環境中透明地使用UTF-8的情況下,使用BOM將會干擾任何協議或文件格式,這些協議或文件格式一開始就需要特定的ASCII字符,例如使用「#!」。在Unix shell腳本的開頭。

以及:

在數據具有相關聯的類型,如在一個數據庫中的一個字段,一個BOM是不必要的。特別是,如果文本數據流標記爲UTF-16BE,UTF-16LE,UTF-32BE或UTF-32LE,則BOM既不必要也不允許。任何U + FEFF將被解釋爲ZWNBSP。

BOM不是必需的,也不推薦在UTF-8中使用,因爲它除了標記UTF-8流的起始位置外沒有其他用途。然而,這不是區分UTF-8的有效方式,因爲BOM可能簡單地被解析爲其他編碼格式的字符。

BOM僅應用於數據以多字節格式(UTF-16/32)傳輸且不指定字節順序的上下文中。在哪裏使用這樣的東西超出了我的視野,但這是BOM必不可少的唯一情況。

在將生成和使用所述文本文件的代碼中區分文件(HTML元標記等)或更好的文本編碼。對於UTF-8文件的廣泛分佈,更常見的變體是沒有BOM的文件。實際上,一些文本編輯器不期望物料清單並可能無法正確解析流。

+0

感謝這個相當詳細和權威的答案。 –