gpt4 book ai didi

c# - 来自字符串的 MemoryStream - 关于要使用的编码的混淆

转载 作者:太空狗 更新时间:2023-10-29 20:35:08 24 4
gpt4 key购买 nike

我有一段代码将字符串转换成内存流:

using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(applicationForm)))

但是如果它是正确的,我有点困惑。基本上我总是对 .NET 编码感到困惑。

底线:我是否使用正确的编码对象 (UTF8) 来获取字节?

我知道 .NET 在内部将字符串存储为 UTF-16,但我的 applicationForm 变量基于包含以 UTF-8 格式保存的文本的文件 编码。

谢谢,帕维尔

编辑 1:让我们确切地解释一下我是如何获得 applicationForm 变量的。我确实可以访问使用 GenerateApplicationForm 方法公开类的程序集。该方法返回字符串。但是我知道,在幕后的某个地方,组件使用存储在驱动器上的文件。这些文件的内容使用 UTF-8 编码。所以我不能直接读取文件等。我只有那个字符串,而且我知道,最初使用的是 UTF-8 编码文件。在使用 GenerateApplicationForm 组件的客户端代码中,我必须将 applicationForm 变量转换为流,因为其他组件(来自另一个程序集)需要一个 Stream 。这就是问题中提到的 using.... 语句开始起作用的地方。

最佳答案

假设 applicationForm 是您从某个 UTF8 文本文件中读取的字符串。它将是 UTF16/Unicode,无论源文件的编码如何。当您将文件加载到字符串中时发生转换。

您的代码会将 applicationForm 字符串编码为 UTF8 字节的 MemoryStream

这可能正确也可能不正确,具体取决于您要用它做什么。

.Net 字符串总是 UTF16Unicode。当 Strings 被转换为文件、流或 byte[] 时,它们可以用不同的方式编码。 1 个字节不足以存储所有语言中使用的所有不同字符,因此需要对更复杂的字符串进行编码,以便一个字符可以用多个字节表示,有时或总是取决于所使用的编码。

如果您使用像 ASCII 这样的简单编码,一个字符将始终由一个字节组成,但数据将被限制在 ASCII 字符集中。如果使用任何多字节字符,从任何 UTF 编码转换为“ASCII”可能会丢失数据。

完整图片在unicode go here .

编辑 1:除非有关 GenerateApplicationForm 组件的更多信息,否则编码 UTF8 可能是正确的选择。如果这不起作用,请尝试 ASCIIUTF16。最重要的是,请查阅组件源代码或咨询组件提供商。

编辑 2:绝对是 UTF8 那么,您一直都是对的。

关于c# - 来自字符串的 MemoryStream - 关于要使用的编码的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6188131/

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