UTF-8字符硬编码为字节的取值与转换公式咨询
关于UTF-8字符硬编码为C#字节常量的问题
1. 应该从表格中选取哪一列的值?
对于$、-、+这类ASCII范围内的字符(Unicode码点0-127),它们的UTF-8编码是单字节,且字节值完全等于它们的Unicode码点(code point)的十进制数值。所以你可以直接选取表格里的code point列的十进制值,或者把binary utf8列的单字节二进制转成十进制,结果是完全一致的。
举个实际例子:
$的code point是36,对应的UTF-8字节就是36(十进制),也可以写成十六进制的0x24-的code point是45,UTF-8字节是45(或0x2D)+的code point是43,UTF-8字节是43(或0x2B)
2. C#常量的正确写法
你可以直接填入码点的十进制或十六进制值,两种写法都合法,其中十六进制在ASCII场景下更贴合通用编码习惯:
public class Constants { // 十进制写法 public const byte dollar = 36; public const byte minus = 45; public const byte plus = 43; // 或者十六进制写法(更常用,对应ASCII表的标准十六进制编码) // public const byte dollar = 0x24; // public const byte minus = 0x2D; // public const byte plus = 0x2B; }
3. char列值与字节值的转换公式
在C#中,char类型是UTF-16编码的16位字符,对于ASCII范围内的字符(码点0-127),char的数值就等于它的Unicode码点。而这类字符的UTF-8字节值又和码点完全相同,所以转换公式非常简单:
byte byteValue = (byte)charValue;
比如(byte)'$'会直接返回36,和我们硬编码的结果完全一致。不过要注意:这个公式只适用于ASCII范围内的字符,如果是超出127的Unicode字符,UTF-8会是多字节编码,不能直接用(byte)强制转换,需要用Encoding.UTF8.GetBytes()方法来获取正确的字节数组。
内容的提问来源于stack exchange,提问作者Bercovici Adrian
相关产品推荐
相关产品推荐

