On Thu, Dec 27, 2012 at 3:38 PM, 程梁 <devb...@outlook.com> wrote:

> Noop, I've done nothing, just code for testing. So they are all in the
> same function:
>
> const char* html = d->visualView->toFormattedHtml().toUtf8().constData();
>

No, this line is wrong. You should do as Tony told you.


> TidyBuffer output;
>
> TidyDoc tdoc = tidyCreate();
>
>
> tidyBufInit(&output);
>
> Bool ok = tidyOptSetBool(tdoc, TidyXmlOut, yes);
>
> int rc = -1;
> // config tidy
> if ( ok ) ok = tidyOptSetBool( tdoc, TidyXmlDecl, no );if ( ok ) ok = 
> tidyOptSetBool( tdoc, TidyDropPropAttrs, yes );if ( ok ) ok = tidyOptSetBool( 
> tdoc, TidyMakeBare, yes );if ( ok ) ok = tidyOptSetValue( tdoc, TidyBodyOnly, 
> "yes" );if ( ok ) ok = tidyOptSetBool( tdoc, TidyDropFontTags, yes );if ( ok 
> ) ok = tidyOptSetBool( tdoc, TidyFixComments, yes );if ( ok ) ok = 
> tidyOptSetBool( tdoc, TidyEscapeCdata, yes );if ( ok ) ok = tidyOptSetBool( 
> tdoc, TidyJoinStyles, yes );if ( ok ) ok = tidyOptSetBool( tdoc, 
> TidyEscapeCdata, yes);if ( ok ) ok = tidyOptSetBool( tdoc, TidyHideComments, 
> yes);if ( ok ) ok = tidyOptSetBool( tdoc, TidyForceOutput, 
> yes);tidySetCharEncoding(tdoc, "utf8");
> // start parsing
> if (rc >= 0) {    rc = tidyParseString(tdoc, html);}if (rc >= 0) {    rc = 
> tidyCleanAndRepair(tdoc);}
>
> if (rc >= 0) {    rc = tidySaveBuffer(tdoc, &output);}
>
> if (rc >= 0) {    printf("\nAnd here is the result:\n\n%s", output.bp);
>
>     QByteArray ret = 
> QByteArray(reinterpret_cast<char*>(output.bp),output.size);
> } else {    printf("A severe error (%d) occurred.\n", rc);}
>
>
> tidyBufFree(&output);
> tidyRelease(tdoc);
>
> This is all code I use. The output is:
>
> <html>
>
> <head>
>
> <meta name="generator"
>
> content="HTML Tidy for Windows (vers 25 March 2009), see www.w3.org" />
>
> <title></title>
>
> </head>
>
> <body>锟斤拷@-@H a锟�S锟斤拷锟斤拷锟斤拷锟捷锟锟斤拷</body>
>
> </html>
>
>
> All tages generating by QWebView are correct but text I edited in wev
> view(using page()->setContentEditable(true);) is incorrect. So I think
> this is because the encoding is wrong. But I do use toUtf8() to get char *(
> toUtf8().constData()).
>
>
> Cheng Liang
> Nanjing, China
> http://www.devbean.info
>
> ------------------------------
> From: t...@rightsoft.com.au
> To: interest@qt-project.org
> Date: Thu, 27 Dec 2012 18:15:49 +1100
> Subject: Re: [Interest] How to add tidy using Qt?
>
>
> Hi Cheng,
>
>
>
> You didn't show how the html variable was used?  Are you sure that the
> html pointer is valid?   I suggest:
>
>
>
> QByteArray ba = webView->page()->mainFrame()->toHtml().toUtf8();
>
> const char *html = ba.constData();
>
> ...
>
>
>
> In your original code, the temporary string and byte array were being
> destroyed after that statement, causing a dangling pointer in html.  Even
> if it looked valid immediately after, subsequent allocations would have
> made the area appear corrupt.  By keeping a reference to the temporary, you
> ensure that it will be valid for the whole block.
>
>
>
> Tony.
>
>
>
>
>
> *From:* interest-bounces+tony=rightsoft.com...@qt-project.org [mailto:
> interest-bounces+tony=rightsoft.com...@qt-project.org] *On Behalf Of *??
> *Sent:* Thursday, 27 December 2012 4:52 PM
> *To:* Qt Interest
> *Subject:* [Interest] How to add tidy using Qt?
>
>
>
> Hi, there! I want to add tidy as library into Qt program where I use some
> code as following:
>
> const char* html = webView
> ->page()->mainFrame()->toHtml().toUtf8().constData();
> // ...
> TidyBuffer output;
> Bool ok = tidyOptSetBool(tdoc, TidyXmlOut, yes);
> tidySetCharEncoding(tdoc, "utf8");
> tidySaveBuffer(tdoc, &output);
> QByteArray ret = QByteArray(reinterpret_cast<char*>(output.bp),output.size
> );
>
> But I got warning:
>
> UTF-8 decoding error of 1 bytes : 0xff = U+0255lx
>
> UTF-8 decoding error of 1 bytes : 0xff = U+0255lx
>
> UTF-8 decoding error of 1 bytes : 0xe8 = U+0008lx
>
> UTF-8 decoding error of 1 bytes : 0xe8 = U+0008lx
>
> UTF-8 decoding error of 1 bytes : 0xfd = U+0001lx
>
> UTF-8 decoding error of 1 bytes : 0xfd = U+0001lx
>
> UTF-8 decoding error of 1 bytes : 0xfd = U+0001lx
>
> UTF-8 decoding error of 1 bytes : 0xfd = U+0001lx
>
>
> I've no idea how this happen. Could you help me? Thank you!
>
> Cheng Liang
> Nanjing, China
> http://www.devbean.info
>
> _______________________________________________ Interest mailing list
> Interest@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
>
> _______________________________________________
> Interest mailing list
> Interest@qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
>
>
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to