c++从文件中读取阿拉伯语文本

c++ read Arabic text from file

本文关键字:阿拉伯语 文本 读取 文件 c++      更新时间:2023-10-16

在c++中,我有一个包含阿拉伯语文本的文本文件,如:

شكلك بتعرف تقرأ عربي يا ابن الذين

,我想将该文件的每一行解析为字符串,并在其上使用字符串函数(如substr, length, at…等),然后将其部分打印到输出文件。

我试过这样做,但它打印了一些垃圾字符,如"'c7'e1'de'd1"有没有支持阿拉伯字符的库?

编辑:只是添加代码:

#include <iostream>
#include <fstream>
using namespace std;
int main(){
  ifstream ip;
  ip.open("d.rtf");
  if(ip.is_open() != true){
    cout<<"open failed"<<endl;
    return 0;
  }
  string l;
  while(!ip.eof()){
    getline(ip, l);
    cout<<l<<endl;
  }
  return 0;
}
注意:我仍然需要添加一些处理代码,如
if(l == "كلام بالعربي"){
    string s = l.substr(0, 4);       
    cout<<s<<" is what you are looking for"<<endl;
 }

您需要找出文件正在使用的文本编码。例如,要将UTF-8文件作为wchar_t读取,您可以(c++ 11):

std::wifstream fin("text.txt");
fin.imbue(std::locale("en_US.UTF-8"));
std::wstring line;
std::getline(fin, line);
std::wcout << line << std::endl;

在我看来,处理这个问题的最好方法是使用一些UNICODE帮助器。C甚至c++中的字符串只是一个字节数组。当您这样做时,例如,strlen() [C]或somestring.length() [c++],您将只拥有该字符串的os个字节,而不是os个字符。

可以使用一些辅助功能来帮助您,如mbstowcs()。但我的意见是,他们有点旧,很难使用。

另一种方法是使用c++ 11,理论上,它支持许多与UTF-8相关的东西。但我从来没有看到它完美地工作,至少如果你需要多平台。

我发现最好的解决方案是使用ICU库。有了这个,我可以很容易地处理UTF-8字符串,并且具有与使用常规std::string相同的"魅力"。你有一个字符串类的方法,为长度,子字符串等…而且非常便携。我在windows, Mac和Linux上使用它

您也可以使用Qt。

简单示例:

#include <QDebug>
#include <QTextStream>
#include <QFile>
int main()
{
   QFile file("test.txt");
   file.open(QIODevice::ReadOnly | QIODevice::Text);
   QTextStream stream(&file);
   QString text=stream.readAll();
   if(text == "شكلك بتعرف تقرأ عربي يا ابن الذين")
       qDebug()<<",,,, ";
}

最好逐行处理阿拉伯文本。要从文件中获取所有行阿拉伯语文本,试试

        std::wifstream fin("arabictext.txt");
        fin.imbue(std::locale("en_US.UTF-8"));
        std::wstring line;
        std::wstring text;
        
        
        while ( std::getline(fin, line) )
        {
            text= text+ line + L"n";
        }