2017-05-25 77 views
1

在Rails中,我們有一些文本文件爲ISO-8859-1。有時檔案會以UTF-8 with BOM的形式出現。我試圖確定它的UTF-8 with BMO然後重新讀取文件爲bom|UTF-8Ruby:檢查字節順序標記

我嘗試以下,但它似乎並不正確地比較:

# file is saved as UTF-8 with BOM using Sublime Text 2 

> string = File.read(file, encoding: 'ISO-8859-1') 

# this doesn't work, while it supposed to work 
> string.start_with?("\xef\xbb\xbf".force_encoding("UTF-8")) 
> false 

# it works if I try this 
> string.start_with?('') 
> true 

目的是讀取文件UTF-8 with BOM如果文件具有字節順序標記的開始和我想避免string.start_with?('')方法。

回答

1
string.start_with?("\u00ef\u00bb\u00bf") 

Ruby official documentation來自:

\xnn十六進制比特模式,其中nn是1-2十六進制數字([0-9A-FA-F])

\unnnn Unicode字符,其中nnnn正好是4個十六進制數字([0-9a-fA-F])

也就是說,要插入一個Unicode字符,使用\uXXXX表示法。這是安全的,我們可以可靠地使用這個版本。

+0

謝謝@mudasobwa。有用。你介意解釋一下爲什麼'HEX'版本不能在你的版本工作?我們可以可靠地使用這個版本,並確信它會一直工作嗎?試圖理解它。 – Saim

+0

我已經更新了答案。 – mudasobwa

+0

完美,謝謝。 – Saim