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

时间:2014-05-26 14:16:14

标签: c++ text file-io arabic

在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;
 }

4 个答案:

答案 0 :(得分:2)

您需要找出文件使用的文本编码。例如,要将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;

答案 1 :(得分:1)

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

可以使用一些辅助功能来帮助您,例如mbstowcs()。但我的观点是他们有点老了,难以使用。

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

我找到的最佳解决方案是使用ICU library。有了这个,我可以轻松地使用UTF-8字符串,并使用与常规std::string相同的“魅力”。你有一个带有方法的字符串类,长度,子串等......而且它非常便携。我在Window,Mac和Linux上使用它。

答案 2 :(得分:0)

您也可以使用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()<<",,,, ";
}

答案 3 :(得分:0)

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

        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";
        }