2

Qt を使用して、フリー テキスト入力を XML ノードにシリアル化する方法があります。このテキストには改行文字が含まれる場合があります。問題は、このテキストをシリアライズして再度デシリアライズすると、出力ストリームに余分な改行文字がいくつか挿入されることです。

これは私のシリアル化方法です:

QDomElement textElement = doc.createElement("Sql");
QDomText cdata = doc.createTextNode(m_sql);
textElement.appendChild(cdata);

これは私がシリアライズしたいテキストです:

CREATE FUNCTION func(a INT) RETURNS INT
BEGIN
     return 1;
END

これは、シリアル化されたファイルで得られるものです。

<Sql>CREATE FUNCTION func(a INT) RETURNS INT&#xd;&#xd;

BEGIN&#xd;&#xd;

   return 1;&#xd;&#xd;

END&#xd;&#xd;</Sql>

(これは恐ろしく見えますが、その後に NEWLINE があり&#xd;&#xd;、このエディターでは、そこにあるものを表示することができませんでした。そのため、行の間に空の行があるように見えます。)

これは、逆シリアル化した後に得られるものです。

CREATE FUNCTION func(a INT) RETURNS INT


BEGIN


    return 1;


END

ご覧のとおり、改行が二重になっています...修正方法の手がかりはありますか?

ありがとう

4

1 に答える 1

0

QIODevice::Text読み取り用にファイルを開くときにフラグを使用してみてください。QFile ドキュメントから:

QIODevice::Textに渡されるフラグは、Windows スタイルの行末記号 (" ") を C++ スタイルの行末記号 (" ") に変換するように Qt に指示open()\r\nます\n。デフォルトでは、QFile はバイナリを想定しています。つまり、ファイルに保存されているバイトに対して変換を実行しません。

于 2013-01-25T13:18:06.150 に答える