c++从文件中读取阿拉伯语文本
c++ read Arabic text from file
在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";
}
相关文章:
- 文本文件中的单词链表
- 从命令行c++发送文本文件名
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 罗马数字到阿拉伯语 (vinculum) - 读取字符串中的字符
- 如何使用libraqm使用FreeType2渲染正确的字形(阿拉伯语)
- 在C 中以阿拉伯语名称创建文件
- 使用 GetWindowTextW 从编辑控件获取希伯来语文本
- 从文本文件中读取的代码,删除停止语,然后应用大小写折叠
- 从包含 utf-8(印地语)格式文本的文件读取并写入其他文件
- 将马拉地文字(非阿拉伯语)数字转换为阿拉伯语数字
- 阿拉伯语:'source' Unicode 到最终显示 Unicode
- c++从文件中读取阿拉伯语文本
- 如何将 UTF-8 形式转换为拉丁语/阿拉伯语,反之亦然