gpt4 book ai didi

java - 保留/读取 ZIP 中的 xml 内容,保持正确的编码

转载 作者:太空宇宙 更新时间:2023-11-04 14:17:17 27 4
gpt4 key购买 nike

桌面应用程序将其数据存储在 xml 文件中。该 xml 文件与其他文件一起存储在 Zip 存档中以保留其状态。我一直对编码持怀疑态度,但这一次我真的不明白,为什么它不起作用。以下问题:

当我将数据保留在 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 编码,或者有人能想到任何其他可能导致编码中断的原因吗?

最佳答案

我认为问题是你的记录器没有输出 UTF-8

检查您的记录器是否将 UTF-8 记录为系统输出

java.util.logging.ConsoleHandler.encoding=UTF8

关于java - 保留/读取 ZIP 中的 xml 内容,保持正确的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27567550/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com