在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;
}
答案 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";
}