gpt4 book ai didi

c# - 将字节转换为 ISO 8859-1 编码时,空字节会发生什么情况?

转载 作者:太空狗 更新时间:2023-10-30 01:09:29 25 4
gpt4 key购买 nike

我不确定这个问题是否有意义。我正在转换一个取自 ID3 标记的字节数组并将其转换为字符串。 ID3 标签中的大多数文本框架使用 ISO 8859-1 编码,但这取决于框架。在任何情况下,如果您在 ISO 8859-1 代码中查找 0x00 是什么,它都是无效的。

更复杂的是,由于程序员错误或格式不当,一些字符串以 0x00 结尾,而另一些则不是。

当使用 ISO 8859-1 编码将一系列字节转换为字符串时,您是否手动检查字符串的结尾以查看它是否为空?还是编码对象首先通过它用于转换的任何方法正确处理空值?此外,是否有某种函数可以规范化或“修复”空终止字符串?

当您尝试显示这些字符串时,它们无法正确显示。

我正在为这个特定项目使用 C#。这里有一些关于 ID3 标签的额外信息:ID3 Specs

还是我完全误解了整件事?空终止符只是特定语言处理字符串的一种方式,与编码无关吗?

  • 编辑:我使用了 System.Text.Encoding.GetEncoding("iso-8859-1") 然后调用了 GetString

最佳答案

如果您使用 Encoding.GetEncoding(28591),它只是将字节 0 转换为 Unicode U+0000。编码通常假设它们必须转换所有字节 - 它们不寻找终止符。

将 0 作为 Unicode 0 处理与 Wikipedia description 内联:

In 1992, the IANA registered the character map ISO_8859-1:1987, more commonly known by its preferred MIME name of ISO-8859-1 (note the extra hyphen over ISO 8859-1), a superset of ISO 8859-1, for use on the Internet. This map assigns the C0 and C1 control characters to the unassigned code values thus provides for 256 characters via every possible 8-bit value.

C0和C1控制字符页面包括:

0: Originally used to allow gaps to be left on paper tape for edits. Later used for padding after a code that might take a terminal some time to process (e.g. a carriage return or line feed on a printing terminal). Now often used as a string terminator, especially in the C programming language.

示例代码:

using System;
using System.Text;

class Program
{
static void Main(string[] args)
{
byte[] data = { 0, 0 };
Encoding latin1 = Encoding.GetEncoding(28591);

string text = latin1.GetString(data);
Console.WriteLine(text.Length); // 2
Console.WriteLine((int) text[0]); // 0
Console.WriteLine((int) text[1]); // 0
}
}

关于c# - 将字节转换为 ISO 8859-1 编码时,空字节会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6654517/

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