3
Я пытаюсь использовать этот код (находится на Stackoverflow), чтобы удалить недопустимые символы UTF-8 символов:Java CharsetDecoder вставки пробела после каждого символа
def text = file.text
CharsetDecoder utf8Decoder = Charset.forName("UTF-8").newDecoder();
utf8Decoder.onMalformedInput(CodingErrorAction.IGNORE);
utf8Decoder.onUnmappableCharacter(CodingErrorAction.IGNORE);
ByteBuffer bytes = ByteBuffer.allocate(text.getBytes().length * 2)
CharBuffer cbuf = bytes.asCharBuffer()
cbuf.put(text)
cbuf.flip()
CharBuffer parsed = utf8Decoder.decode(bytes);
println parsed.toString()
Выход я получаю выглядит так:
< d o c u m e n t >
< t i t l e > S o me T i t l e </t i t l e >
< s i t e > A S i t e </s i t e >
Любые идеи о том, почему он так себя ведет?
Есть ли postable вход вы можете предоставить? –
Не следует ли указывать кодировку в 'text.getBytes()'? Я сомневаюсь, что это причина проблемы. Кроме того, указываете ли вы какую-либо кодировку при открытии/чтении файла? –
Я подозреваю, что file.text использует кодировку символов платформы по умолчанию, но она [кажется, не указана] (http://groovy.codehaus.org/groovy-jdk/java/io/File.html#getText ()). Вероятно, вы должны использовать тот, который позволяет вам указать кодировку (http://groovy.codehaus.org/groovy-jdk/java/io/File.html#getText (java.lang.String)), иначе [File.getBytes()] (http://groovy.codehaus.org/groovy-jdk/java/io/File.html#getBytes()) для получения необработанных байтов. В противном случае байты уже были преобразованы один раз уже, возможно, с неправильной кодировкой. –