gpt4 book ai didi

c++ - 带有 _O_U8TEXT 标志的 _wsopen_s,将 0 返回到缓冲区,在字符之间,在俄语字符之间返回 4。 VS2010

转载 作者:太空宇宙 更新时间:2023-11-04 14:23:03 26 4
gpt4 key购买 nike

如果我输入一个 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,格式正确,即使不使用此运算符也是如此?

最佳答案

看起来 _O_U8TEXT 导致 _read 从 UTF-8 转换为 UTF-16。您可能应该使用像 getwc 这样的高级 Unicode 函数来阅读。在 unicode 模式下打开流时。你可以使用 _wfopen_s使用 L"rt, ccs=UTF-8",或者如果您需要共享支持,您可以使用现有的 _wsopen_s 调用,然后调用 _wfdopen .

关于c++ - 带有 _O_U8TEXT 标志的 _wsopen_s,将 0 返回到缓冲区,在字符之间,在俄语字符之间返回 4。 VS2010,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6090096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com