A charset conversion (_charset!=_target_charset) not work always. Some nodes (or nodes attributes) can be converted, other - stay without conversations. There is two normal solutions to fix this issue:
1: Call convert_text() everywhere on output and back on input
2: Dont call convert_text() anywhere (and inside outertext() function too)
There is diff for PARTIALLY solution for that problem (for outertext() function).