1

次のようなUTF-8エンコードファイルを入力すると、

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などを取得します

ロシア語の文字に到達するまで、20''の後に4''が続くような完全に不適切な記号が表示されます。

'char'-この文字のvstudio出力です..奇妙なことに20と4で同じです。

したがって、質問は次のとおりです。この演算子を使用しなくても、EOFまで出力バッファを文字列に取得し、適切にフォーマットする方法はありますか?

4

1 に答える 1

0

UTF-8からUTF-16に変換する_O_U8TEXT原因のようです。おそらく、Unicodeモードでストリームを開くときの_readように、高レベルのUnicode関数を使用して読んでいるはずです。でgetwc使用できます。または、共有サポートが必要な場合は、既存の呼び出しの後に。を使用できます。_wfopen_sL"rt, ccs=UTF-8"_wsopen_s_wfdopen

于 2011-05-22T19:26:05.607 に答える