gpt4 book ai didi

c# - 没有指定名称字段的编码,任何非 ASCII 字节都将被丢弃

转载 作者:行者123 更新时间:2023-12-05 03:45:25 24 4
gpt4 key购买 nike

以下 .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'

构造TarInputStreamTarOutputStream时,我应该指定什么Encoding

最佳答案

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

因为它似乎默认是 ASCII,你实际上不需要更改\指定任何编码。

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


更新(引用Maintainer的评论以及对Github issue的回复)

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

no encoding conversion / just [copies] the lower 8 bits

关于指定编码的建议:

If you don't know what encoding might have been used, the safest bet is often to specify 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

关于c# - 没有指定名称字段的编码,任何非 ASCII 字节都将被丢弃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65847723/

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