Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;文本文件,中文字符 我有一个C++项目,它应该在每行的开头加上 ,并将代码> 到每行的末尾。这适用于正常的英文文本,但我有一个中文文本文件,我想这样做,但它不工作。我通常使用.txt文件,但为此我必须使用.rtf来保存中文文本。在我运行代码之后,它就变成了胡言乱语。这里有一个例子_C++_Internationalization_Rtf_Cjk - Fatal编程技术网

C++;文本文件,中文字符 我有一个C++项目,它应该在每行的开头加上 ,并将代码> 到每行的末尾。这适用于正常的英文文本,但我有一个中文文本文件,我想这样做,但它不工作。我通常使用.txt文件,但为此我必须使用.rtf来保存中文文本。在我运行代码之后,它就变成了胡言乱语。这里有一个例子

C++;文本文件,中文字符 我有一个C++项目,它应该在每行的开头加上 ,并将代码> 到每行的末尾。这适用于正常的英文文本,但我有一个中文文本文件,我想这样做,但它不工作。我通常使用.txt文件,但为此我必须使用.rtf来保存中文文本。在我运行代码之后,它就变成了胡言乱语。这里有一个例子,c++,internationalization,rtf,cjk,C++,Internationalization,Rtf,Cjk,{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31506\stshfloch31506\stshfhich31506\stshfbi31507\deflang1033\deflangfe1033\themelang1033\themelangf0\themelangcs0{\fonttbl\f2\fbidi \fmodern\fcharset0\fprq1{*\panose 02073090202050204

{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31506\stshfloch31506\stshfhich31506\stshfbi31507\deflang1033\deflangfe1033\themelang1033\themelangf0\themelangcs0{\fonttbl\f2\fbidi \fmodern\fcharset0\fprq1{*\panose 0207309020205020404}快递员 新的;}

代码:

intmain()
{
如果输入;
流出的液体;
字符串lineT,newlineT;
in.open(“rawquote.rtf”);
if(in.fail())
出口(1);
out.open(“itemisedQuote.rtf”);
做
{
getline(in,lineT,'\n');
换行符+=“”;
newlineT+=lineT;
换行符+=“”;
如果(lineT.length()>5)
{
out看起来像,这很有意义,因为您说这是一个rtf文件

基本上,如果你打开时转储文件,你会看到它看起来像

此外,您应该重新访问您的循环

std::string line;
while(getline(in, line, '\n'))
{
  // do stuff here, the above check correctly that you have indeed read in a line!
  out << "<item>" << line << "</item>" << endl;
}
std::字符串行;
while(getline(in,line,'\n'))
{
//在这里做一些事情,正确地检查上面的内容,确保你确实读了一行!
out看起来像,这很有意义,因为您说这是一个rtf文件

基本上,如果你打开时转储文件,你会看到它看起来像

此外,您应该重新访问您的循环

std::string line;
while(getline(in, line, '\n'))
{
  // do stuff here, the above check correctly that you have indeed read in a line!
  out << "<item>" << line << "</item>" << endl;
}
std::字符串行;
while(getline(in,line,'\n'))
{
//在这里做一些事情,正确地检查上面的内容,确保你确实读了一行!

我认为你应该用“wchar”来表示字符串而不是“普通字符”。

我认为你应该用“wchar”来表示字符串而不是“普通字符”。

你不能像普通文本那样读取RTF代码,因为你只会忽略格式标记等,可能会破坏代码


尝试使用UTF-8(无BOM)将中文文本保存为文本文件,您的代码应该可以工作。但是,如果其他UTF-8编码字符基本上包含换行符(目前不确定这部分),则可能会失败,因此您应该尝试进行真正的UTF-8转换,并使用宽字符而不是常规字符读取文件(正如Chan所建议的),使用C++有点棘手。

< P>你不能像纯文本一样读取RTF代码,因为你只会忽略格式标签等等,可能只是破解代码。
尝试使用UTF-8(无BOM)将中文文本保存为文本文件,您的代码应该可以工作。但是,如果其他UTF-8编码字符基本上包含换行符(目前不确定这部分),则可能会失败,因此您应该尝试进行真正的UTF-8转换,并使用宽字符而不是常规字符读取文件(如Chan所建议的),使用C++有点棘手。

如果我理解这个代码的目标,你的解决方案就不起作用。RTF文档中的行中断与可见文本中的断线不符。
如果你不能只使用纯文本(汉字对于有效的编码来说不是问题),那么看看。你会发现这是一场噩梦。所以你最好的选择可能是一个第三方库,它可以解析RTF并逐行读取我从未寻找过这样的库,因此我没有任何建议,但我确信它们确实存在。

如果我理解此代码的目的,您的解决方案将不起作用。RTF文档中的换行符与可见文本中的换行符不对应


如果你不能只使用纯文本(汉字对于有效的编码来说不是问题),那么看看。你会发现这是一场噩梦。所以你最好的选择可能是一个第三方库,它可以解析RTF并逐行读取我从来没有寻找过这样的库,所以我没有任何建议,但我确信它们确实存在。

这对于非中文文本来说是一个奇迹。“\n”不是RTF中的行分隔符,“\par”是。对中文来说,RTF标题造成更大损害的可能性当然更大

C++不是解决这一问题的最佳语言。只要文件不太大,它在C#中只是一个5分钟的小程序:

using System;
using System.Windows.Forms;   // Add reference

class Program {
    static void Main(string[] args) {
        var rtb = new RichTextBox();
        rtb.LoadFile(args[0], RichTextBoxStreamType.RichText);
        var lines = rtb.Lines;
        for (int ix = 0; ix < lines.Length; ++ix) {
            lines[ix] = "<item>" + lines[ix] + "</item>";
        }
        rtb.Lines = lines;
        rtb.SaveFile(args[0], RichTextBoxStreamType.RichText);
    }
}
使用系统;
使用System.Windows.Forms;//添加引用
班级计划{
静态void Main(字符串[]参数){
var rtb=new RichTextBox();
加载文件(args[0],RichTextBoxStreamType.RichText);
var线=rtb线;
对于(int-ix=0;ix

<如果C++是一个硬的要求,那么你必须找到一个RTF解析器。

这是一个奇迹,这对于非中文文本来说是一种奇迹。“\n”不是RTF中的行分隔符,“\PAR”是。对RTF头的更多伤害的可能性对于汉语来说肯定更大。< /P> C++不是解决这一问题的最佳语言。只要文件不太大,它在C#中只是一个5分钟的小程序:

using System;
using System.Windows.Forms;   // Add reference

class Program {
    static void Main(string[] args) {
        var rtb = new RichTextBox();
        rtb.LoadFile(args[0], RichTextBoxStreamType.RichText);
        var lines = rtb.Lines;
        for (int ix = 0; ix < lines.Length; ++ix) {
            lines[ix] = "<item>" + lines[ix] + "</item>";
        }
        rtb.Lines = lines;
        rtb.SaveFile(args[0], RichTextBoxStreamType.RichText);
    }
}
使用系统;
使用System.Windows.Forms;//添加引用
班级计划{
静态void Main(字符串[]参数){
var rtb=new RichTextBox();
加载文件(args[0],RichTextBoxStreamType.RichText);
var线=rtb线;
对于(int-ix=0;ix

如果C++是一个硬的需求,那么你必须找到一个RTF解析器。< /P>在一个文本的mod中查看RAWQUTE.RTF输入文件。