1字节8位编码
1 byte 8 bit encoding
我需要使用一些未知的 ASCII 兼容 1 字节编码从文件创建 System.String
,以用正则表达式替换文本中的一些数字,但 Encoding.ASCII
是 7 位,而 Utf-8是多字节的,所以它不会返回相同的字节序列。
.Net Core 中是否有可以往返任何字节序列的编码?
UPD:Windows-1256 Character set 看起来很有希望,但只有 Windows。
首先,如果您不知道编码,那么使用字符串与其说是一种解决方案,不如说是一种技巧。我想它可以更快,也可能更容易,但为了更健壮和干净的解决方案,我只需要处理 byte[] 或类似的东西。如果是一次性解决方案,字符串就可以了。
如果您真的想在这里使用字符串,我建议您查看 windows/cp 系列或 ISO 8859 系列的所有编码。例如。在我的电脑上,我可以使用 iso-8859-1
。 Windows 1256
也可以,在 Linux 上通常称为 cp 1256
(代码页的 CP)。
但是,不能保证所有平台都支持该编码,AFAIK .NET 只保证 UTF 和 Unicode。如果您想在任何地方使用此编码,请考虑像这样使用 nuget 包:https://www.nuget.org/packages/System.Text.Encoding.CodePages/
默认情况下,使用 ISO-8859-1
将直接映射到 Latin-1 Supplement Unicode block and back again. And it one of encodings .NET Core supports。
var enc = Encoding.GetEncoding(28591); // ISO-8859-1 (code page 28591)
var b = Enumerable.Range(0, 0xFF + 1).Select(x => (byte)x).ToArray();
enc.GetBytes(enc.GetString(b)).SequenceEqual(b) == true
我需要使用一些未知的 ASCII 兼容 1 字节编码从文件创建 System.String
,以用正则表达式替换文本中的一些数字,但 Encoding.ASCII
是 7 位,而 Utf-8是多字节的,所以它不会返回相同的字节序列。
.Net Core 中是否有可以往返任何字节序列的编码?
UPD:Windows-1256 Character set 看起来很有希望,但只有 Windows。
首先,如果您不知道编码,那么使用字符串与其说是一种解决方案,不如说是一种技巧。我想它可以更快,也可能更容易,但为了更健壮和干净的解决方案,我只需要处理 byte[] 或类似的东西。如果是一次性解决方案,字符串就可以了。
如果您真的想在这里使用字符串,我建议您查看 windows/cp 系列或 ISO 8859 系列的所有编码。例如。在我的电脑上,我可以使用 iso-8859-1
。 Windows 1256
也可以,在 Linux 上通常称为 cp 1256
(代码页的 CP)。
但是,不能保证所有平台都支持该编码,AFAIK .NET 只保证 UTF 和 Unicode。如果您想在任何地方使用此编码,请考虑像这样使用 nuget 包:https://www.nuget.org/packages/System.Text.Encoding.CodePages/
默认情况下,使用 ISO-8859-1
将直接映射到 Latin-1 Supplement Unicode block and back again. And it one of encodings .NET Core supports。
var enc = Encoding.GetEncoding(28591); // ISO-8859-1 (code page 28591)
var b = Enumerable.Range(0, 0xFF + 1).Select(x => (byte)x).ToArray();
enc.GetBytes(enc.GetString(b)).SequenceEqual(b) == true