1字节8位编码

问题描述 投票:0回答:2

我需要使用一些未知的 ASCII 兼容 1 字节编码从文件创建

System.String
,以用正则表达式替换文本中的一些数字,但
Encoding.ASCII
是 7 位,而 Utf-8 是多字节,所以它不会' t 往返回到相同的字节序列。

.Net Core 中是否有可以往返任何字节序列的编码?

UPD:Windows-1256 字符集 看起来很有前途,但仅限 Windows。

c# .net encoding character-encoding .net-core-3.1
2个回答
1
投票

首先,如果您不知道编码,那么使用字符串更像是一种黑客而不是解决方案。我想它可以更快,可能更容易,但为了更强大和干净的解决方案,我只需要使用 byte[] 或类似的东西。如果是一次性解决方案,字符串就可以了。

如果您确实想在此处使用字符串,我建议您查看 windows/cp 系列或 ISO 8859 系列的所有编码。例如。在我的电脑上,我可以使用

iso-8859-1
Windows 1256
也可以,在 Linux 上通常称为
cp 1256
(CP 代表代码页)。

但是,不能保证所有平台都支持该编码,据我所知 .NET 仅保证 UTF 和 Unicode。如果您希望这种编码随处可用,请考虑使用这样的 nuget 包:https://www.nuget.org/packages/System.Text.Encoding.CodePages/


0
投票

使用

ISO-8859-1
将直接映射到 Latin-1 Suplement Unicode block 并再次映射回来(往返)。它是 .NET Core 默认支持的编码之一。 // C# 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

每个 
char

都会有相等的

byte
// F#
let bytes = [| Byte.MinValue .. Byte.MaxValue |]
let chars = Encoding.Latin1.GetChars bytes
Array.map byte chars = bytes

val it: bool = true

© www.soinside.com 2019 - 2024. All rights reserved.