gpt4 book ai didi

c++ - 如何从写入文件的 UTF-8 编码 URDU 字符串中获取单个字符?

转载 作者:行者123 更新时间:2023-11-30 04:24:33 24 4
gpt4 key购买 nike

我正在从事乌尔都语印地语翻译/音译工作。我的目标是将乌尔都语句子翻译成印地语,反之亦然,我使用的是带有 C++ 语言的 Visual C++ 2010 软件。我在保存为 UTF-8 格式的文本文件中写了一个乌尔都语句子。现在我想从该文件中一个一个地获取单个字符,以便我可以对其进行处理以将其转换为等效的印地语字符。当我尝试从输入文件中获取单个字符并将该单个字符写入输出文件时,我在输出文件中放置了一些未知的丑陋字符。请用正确的代码帮助我。我的代码如下

#include<iostream>
#include<fstream>
#include<cwchar>
#include<cstdlib>
using namespace std;
void main()
{
wchar_t arry[50];
wifstream inputfile("input.dat",ios::in);
wofstream outputfile("output.dat");

if(!inputfile)
{
cerr<<"File not open"<<endl;
exit(1);
}

while (!inputfile.eof()) // i am using this while just to
// make sure copy-paste operation of
// written urdu text from one file to
// another when i try to pick only one character
// from file, it does not work.

{ inputfile>>arry; }
int i=0;
while(arry[i] != '\0') // i want to get urdu character placed at
// each-index so that i can work on it to convert
// it into its equivalent hindi character
{ outputfile<<arry[i]<<endl;
i++; }
inputfile.close();
outputfile.close();
cout<<"Hello world"<<endl;
}

最佳答案

假设您在 Windows 上,获取“有用”字符的最简单方法是读取更大的文件 block (例如一行或整个文件),然后使用 MultiByteToWideChar 函数将其转换为 UTF-16 .使用“伪”代码页 CP_UTF8。在许多情况下,不需要解码 UTF-16,但我不知道你所指的语言;如果您期望非 BOM 字符(代码超过 65535),您可能需要考虑解码 UTF-16(或自己解码 UTF-8)以避免处理 2 字字符。

如果愿意,您也可以编写自己的 UTF-8 解码器。这并不复杂,只需要一些位操作即可从输入字节中提取正确的位并将它们组装成最终的 unicode 值。

提示:Windows 还有一个 NormalizeString() 函数,您可以使用它来确保文件中的字符符合您的预期。这可用于将在 Unicode 中具有多种表示形式的字符转换为它们的“规范”表示形式。

编辑:如果你阅读 UTF-8 编码,你可以很容易地看到你可以读取第一个字节,计算出你还需要多少字节,也读取这些,然后将整个内容传递给 MultiByteToWideChar 或你自己的解码器(尽管您自己的解码器当然可以只从文件中读取)。这样你就可以真正做到“一次读取一个字符”。

关于c++ - 如何从写入文件的 UTF-8 编码 URDU 字符串中获取单个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12654540/

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