在Go 中讀取BOM 的檔案
問題:
問題:如何讀取取Unicode 檔案Go 中包含或缺少位元組順序標記(BOM)?有沒有標準方法來處理這個問題?
答案:Go 的標準函式庫並沒有提供專門的 BOM 處理方法。以下是您自己實現此功能的兩種方法:
緩衝讀取器方法:<code class="go">import ( "bufio" "os" ) func main() { fd, err := os.Open("filename") if err != nil { // Handle error } br := bufio.NewReader(fd) r, _, err := br.ReadRune() if err != nil { // Handle error } if r != '\uFEFF' { br.UnreadRune() // Not a BOM -- put the rune back } }</code>bufio 套件提供了處理 BOM 的便利解決方案。您可以將緩衝讀取器包裹在資料流周圍並檢查第一個符文:
如果第一個符文不是BOM,您可以按預期繼續從緩衝讀取器讀取。
Seeker 介面方法:<code class="go">import ( "os" ) func main() { fd, err := os.Open("filename") if err != nil { // Handle error } bom := [3]byte _, err = io.ReadFull(fd, bom[:]) if err != nil { // Handle error } if bom[0] != 0xef || bom[1] != 0xbb || bom[2] != 0xbf { _, err = fd.Seek(0, 0) // Not a BOM -- seek back to the beginning if err != nil { // Handle error } } }</code>對於實作io.Seeker 介面的物件(例如os.File),您可以直接檢查前三個位元組,如果沒有BOM ,則回到開頭:請注意,此方法假定UTF-8 編碼。對於其他編碼,需要更複雜的處理。
以上是如何在 Go 中讀取帶有 BOM 和沒有 BOM 的 Unicode 檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!