桌面应用程序将其数据存储在xml文件中。此xml文件与其他文件一起存储在Zip-Archive中以保持其状态。我一直都是用编码绘制的匕首,但这次我真的不明白,为什么它不起作用。以下问题:
当我将数据保存在xml文件中时,一切似乎都很好。我记录输出,所有编码都是正确的。我可以使用其他工具打开Zip来检查XML,并且编码也很好,但是当我尝试在我的Java应用程序中再次读取它时,编码变得混乱,例如德语变音符号不是再纠正。
以下代码用于从zip中读取xml:
private String readZipArchive( final Path path ) throws ZipException, IOException
{
String xmlData = null;
try (ZipFile zipFile = new ZipFile( path.toFile(), StandardCharsets.UTF_8 ))
{
final Enumeration<? extends ZipEntry> zipEntryEnum = zipFile.entries();
while ( zipEntryEnum.hasMoreElements() )
{
final ZipEntry zipEntry = zipEntryEnum.nextElement();
logger.debug( "zipEntry: " + zipEntry + " comment: " + zipEntry.getComment() );
switch ( FileType.valueOf( zipEntry.getComment() ) )
{
case DATA:
xmlData = convertStreamToString( zipFile.getInputStream( zipEntry ) );
//Here the String is not UTF 8, why? German Umlauts are broken:
logger.dev( "Load State from File: \n" + xmlData );
break;
case PICTURE:
//OTHER Implementation, not important.
break;
}
}
return xmlData;
}
}
private static String convertStreamToString( final InputStream is )
{
try (Scanner s = new Scanner( is, "UTF-8" ))
{
s.useDelimiter( "\\A" );
return s.hasNext() ? s.next() : "";
}
}
谁能看到,我的错误在这里?如何保持正确的UTF-8编码,或者任何人都可以想到可能导致编码中断的任何其他原因?
答案 0 :(得分:0)
我认为问题是你的记录器没有输出UTF-8
检查您的记录器是否记录UTF-8作为其系统输出
java.util.logging.ConsoleHandler.encoding = UTF8