微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

未指定 Name 字段的编码,将丢弃任何非 ASCII 字节 更新参考维护者的评论以及对 Github 问题的回应

如何解决未指定 Name 字段的编码,将丢弃任何非 ASCII 字节 更新参考维护者的评论以及对 Github 问题的回应

以下 .NET 5.0 代码使用 ICSharpCode.SharpZipLib

var gzipInputStream = new GZipInputStream(sourceStream);
var tarInputStream = new TarInputStream(gzipInputStream);

var gZipOutputStream = new GZipOutputStream(destinationStream);
var TaroutputStream = new TaroutputStream(gZipOutputStream);

现在发出警告

[CS0618] 'TarInputStream.TarInputStream(Stream)' is obsolete: 
    'No Encoding for Name field is specified,any non-ASCII bytes will be discarded'

[CS0618] 'TaroutputStream.TaroutputStream(Stream)' is obsolete: 
    'No Encoding for Name field is specified,any non-ASCII bytes will be discarded'

在构造 EncodingTarInputStream 时应该指定什么 TaroutputStream

解决方法

您指定的编码取决于文件的内容,并取决于您在方案中尝试实现的\支持。

因为看起来默认是 ASCII,所以你实际上不需要'需要'改变\指定任何编码。

关于 obsolete flag 警告,如果您询问如何处理警告并保持默认编码,您可以使用 TarOutputStream.TarOutputStream(Stream,null) ctor 方法签名。


更新(参考维护者的评论以及对 Github 问题的回应)

null 中指定 TarOutputStream.TarOutputStream(Stream,null) 时条目编码过程的默认行为是

没有编码转换/只是[复制]低8位

关于指定编码的建议:

如果您不知道可能使用了什么编码,最安全的选择通常是指定 UTF-8

因此,我的建议与该建议相呼应。您调用非过时构造函数并指定 Encoding.UTF8

var gzipInputStream = new GZipInputStream(sourceStream);
var tarInputStream = new TarInputStream(gzipInputStream,Encoding.UTF8);

var gZipOutputStream = new GZipOutputStream(destinationStream);
var tarOutputStream = new TarOutputStream(gZipOutputStream,Encoding.UTF8);

谢谢@piksel bitworks 和@Panagiotis Kanavos

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。