我很疑惑 为什么java 和 C# 关于 utf-8 对于 数字和英文的输出 保持是一致的,但对于中文的输出是不一致的
这是java 运行环境跑的结果 jdk 版本是 jdk1.8.0
以下是源码
byte[] Number = "1".getBytes("UTF-8");
System.out.print("1的byte数组打印输出: ");
for (int i = 0;ilength;i++){
System.out.print(" "+Number[i]);
}
System.out.println("");
byte[] Zms = "A".getBytes("UTF-8");
System.out.print("A的byte数组打印输出: ");
for (int i = 0;ilength;i++){
System.out.print(" "+Zms[i]);
}
System.out.println("");
byte[] Hzs = "入".getBytes("UTF-8");
System.out.print("入的byte数组打印输出: ");
for (int i = 0;ilength;i++){
System.out.print(" "+Hzs[i]);
}
System.out.println("");
System.out.println("----------------------");
这是C# 的代码的运行效果
用VS2019 跑的
byte[] Number = Encoding.UTF8.GetBytes("1");
Console.Write("1的byte数组打印输出: ");
foreach (byte b in Number)
{
Console.Write(" " + b);
}
Console.WriteLine();
byte[] Zms = Encoding.UTF8.GetBytes("A");
Console.Write("A的byte数组打印输出: ");
foreach (byte b in Zms)
{
Console.Write(" " + b);
}
Console.WriteLine();
byte[] Hzs = Encoding.UTF8.GetBytes("入");
Console.Write("入的byte数组打印输出: ");
foreach (byte b in Hzs)
{
Console.Write(" " + b);
}
我想知道 Java代码中 byte[] Hzs = "入".getBytes("UTF-8"); 该用C# 代码怎么表示 才能让输出保持一致。
https://www.w3cschool.cn/java/java-unsigned-data-type.html
Java不支持无符号数据类型。
byte,short,int和long都是有符号数据类型。
对于有符号数据类型,值范围的一半存储正数,一半用于负数,因为一个位用于存储值的符号。
例如,一个字节需要8位;其范围是-128到127.如果您只在一个字节中存储正数,则其范围将为0到255。
C#
sbyte -128 到 127 8 位带符号整数 System.SByte
byte 0 到 255 无符号的 8 位整数 System.Byte
short -32,768 到 32,767 有符号 16 位整数 System.Int16
ushort 0 到 65,535 无符号 16 位整数 System.UInt16
int -2,147,483,648 到 2,147,483,647 带符号的 32 位整数 System.Int32
总结就是 Java的 byte 是由符号的 -128到127 ;C# 是的无符号的 0 到 255
在我看来,你这两个输出是一致的,一个是负数,加 2^8 进行运算就可以了和 c# 一致了,试着用无符号整型看看