use*_*293 4 c# encoding id3 iso-8859-1
我不完全确定这个问题是否有意义.我正在转换从ID3标签中取出的字节数组并将其转换为字符串.ID3标签中的大多数文本框架使用ISO 8859-1编码,但它取决于框架.在任何情况下,如果您查找ISO 8859-1代码中的0x00,它将无效.
为了进一步复杂化,无论是程序员错误还是格式化不当,一些字符串以0x00结尾,而另一些则不然.
使用ISO 8859-1编码将一系列字节转换为字符串时,您是否手动检查字符串的结尾以查看它是否为空?或者编码对象将通过它用于转换的任何方法在第一时间正确处理null?此外,是否有某种函数可以规范化或"修复"空终止字符串?
当您尝试显示这些字符串时,它们无法正确显示.
我在这个特定项目中使用C#.关于ID3的一些额外信息标签:ID3规格
还是我完全误解了整件事?null终止符只是一种特定语言处理字符串的方式,它与编码无关吗?
如果使用Encoding.GetEncoding(28591),它只是将字节0转换为Unicode U + 0000.编码通常假设他们必须转换所有字节 - 他们不寻找终结符.
这种0作为Unicode 0的处理符合维基百科的描述:
1992年,IANA注册了字符映射ISO_8859-1:1987,更常见的是其首选的MIME名称ISO-8859-1(请注意ISO 8859-1的额外连字符),ISO 8859-1的超集,在互联网上使用.此映射将C0和C1控制字符分配给未分配的代码值,从而通过每个可能的8位值提供256个字符.
C0和C1控制字符页面包括:
0:最初用于允许在纸带上留下间隙进行编辑.稍后用于在可能需要终端处理一段时间的代码之后进行填充(例如,在打印终端上的回车或换行).现在经常用作字符串终止符,尤其是在C编程语言中.
示例代码:
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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1155 次 |
| 最近记录: |