2011-05-22 67 views
1

如果我輸入一個UTF-8編碼的文件一樣,_wsopen_s帶有_O_U8TEXT標誌,返回0緩衝區,中間字符和4個俄語字符之間。 VS2010

example.html的

<html> 
<head> 
<meta http-equiv=Content-Type content="text/html;charset=utf-8"> 
<title>Текст на русском</title> 

其中 「Текстнарусском」 - 是俄羅斯

#include <string> 
#include <ios> 
#include <fcntl.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <io.h> 
#include <stdio.h> 

using namespace std; 
int main() 
{ 
int fl; unsigned int nbytes = 60000,bspr; char buf [60000]; 
errno_t err = _wsopen_s(&fl,L"c:\\example.html", _O_U8TEXT,_SH_DENYNO,_S_IREAD | _S_IWRITE); // &fh,"c:\\example.html",_O_RDONLY, 
if (err!=0) exit (1); 
if ((bspr = _read(fl,buf,nbytes))<=0) 
{ 
    perror (" Error opening file "); 
    exit (1); 
} 

} 

我得到BUF文本[ 0] = 60'<',buf [1] = 0,buf [2] = 104'h',buf [3] = 0等

直到我達到俄文字母,符號l IKE 20「」每個其次是4',

「字符」 - 這是人物的vstudio輸出.. 20和4

奇怪的是相同的,所以,問題是 - 有什麼辦法,我可以得到輸出緩衝區到一個字符串,直到EOF,格式正確,即使不使用這個運算符?

回答

0

它看起來像_O_U8TEXT導致_read從UTF-8轉換爲UTF-16。在unicode模式下打開流時,您應該可以使用高級Unicode功能(如getwc)進行閱讀。您可以使用_wfopen_sL"rt, ccs=UTF-8",或者如果您需要共享支持,則可以使用現有的_wsopen_s調用,然後調用_wfdopen

+0

謝謝,這就是我一直在尋找的 – cynicalanlz 2011-05-22 19:53:48

相關問題