wifstream並不能理解UNICODE文字檔案

2021-04-08 23:11:17 字數 733 閱讀 5183

今天在寫乙個小應用的時候,需要從乙個utf-16的文字檔案中讀入乙個乙個的寬字元,想當然的以為wifstream天生就能識別 unicode,**如下(utf16.txt是乙個用記事本編輯並儲存為utf16格式的文字檔案)

001 wifstream ifs("utf16.txt");

002 for (;;)

...結果令人失望,ifs >> wc(或ifs.get(wc))只是把檔案中的下乙個位元組置入wc,表現出來的行為與ifstream沒有任何區別…& hellip;啊,忘了,utf16的文字檔案前面還有兩個位元組用來標識位元組序(在x86平台下,是ff fe,表示低位在前的utf16),於是在002行前面再加上一句:

ifs.seekg(2, ios::beg);

嗯,bom(byte order marker)被跳過了,但是get()方法唯讀乙個位元組(用》提取符也是一樣)的行為並沒有得到改變。不知道wifstream的策略究竟是怎樣的(如果wistringstream來測試,行為完全符合預期),為什麼會有這種古怪,時間不早,明天來看相關原始碼,先用其他方法暫時應付過去:

ifstream ifs("utf16.txt", ios::in | ios::binary);

if (!ifs.is_open())

throw runtime_error("open file failed");

ifs.seekg(2, ios::beg);

while (ifs.good())

佇列並不能解決「超載」

人們總是錯誤地使用佇列,最壞的情況是用它解決 超載 overload 問題。fred hebert是 learn you some erlang for great good 一書的作者。在這本erlang入門書籍中,他結合生動的插圖 恰當的例項以淺顯易懂的方式講解了技術問題。近日,他以同樣的方式闡...

pkill有的時候並不能殺死程序?

pkill的用法 根據程序命令列,殺死程序 如下intellij.go 為乙個 伺服器,把本地請求轉向乙個 在mac下啟動 go run intellij.go 檢視程序 有兩個程序96473 96466 開啟程序後的情況 因此這個 伺服器的真正程序id是96473,程序名字是 var folder...

python 字典dict型別合併 不能錯過哦

我要的字典的鍵值有些是資料庫中表的欄位名,但是有些卻不是,我需要把它們整合到一起,因此有些這篇文章.非得湊夠150個字,我也是沒有辦法,扯一點昨天的問題吧,話說python中的session就只能在requests庫中發揮作用?就不能想asp.net中那樣存值,然後設定過期時間以便驗證?我原本是想在...