事情是这样的
----------------------
因为程序需要,要用.net去接一个java的服务端来通讯通讯的原理,就是按一定的规则,把 string -> byte[] 传过去----------------------遇到问题如下:
(utf-8编码)我把 "Hello" 搞成byte[] 传过去,对方能判别,英文没问题我把 "关" 搞成byte[] 传过去,对方【不能识别】,,中文出问题了我们双方对了一下 byte[] 里的 每个byte发现-----------------------------------
【NET】
"Hello" {104,101,108,108,111}
"关" {229,133,179}
-----------------------------------
【java】
"Hello" {104,101,108,108,111}
"关" {-27,-123,-77}
-----------------------------------
查了下资料,,
------------------
c#中字节byte的范围是0~255;
java中字节byte的范围是-128~127:
------------------OH,,My god。。如何是好,,
我这边.net 一定要按 java 那种byte[] 过去的,否则接不了,有招吗?大侠们附代码(net)
------------------------
string str = "关";
byte[] BB = Encoding.GetEncoding("utf-8").GetBytes(str);
------------------------
----------------------
因为程序需要,要用.net去接一个java的服务端来通讯通讯的原理,就是按一定的规则,把 string -> byte[] 传过去----------------------遇到问题如下:
(utf-8编码)我把 "Hello" 搞成byte[] 传过去,对方能判别,英文没问题我把 "关" 搞成byte[] 传过去,对方【不能识别】,,中文出问题了我们双方对了一下 byte[] 里的 每个byte发现-----------------------------------
【NET】
"Hello" {104,101,108,108,111}
"关" {229,133,179}
-----------------------------------
【java】
"Hello" {104,101,108,108,111}
"关" {-27,-123,-77}
-----------------------------------
查了下资料,,
------------------
c#中字节byte的范围是0~255;
java中字节byte的范围是-128~127:
------------------OH,,My god。。如何是好,,
我这边.net 一定要按 java 那种byte[] 过去的,否则接不了,有招吗?大侠们附代码(net)
------------------------
string str = "关";
byte[] BB = Encoding.GetEncoding("utf-8").GetBytes(str);
------------------------
JDK7,VS2010(中文),Win7(x86)(中文)
下面是测试代码啊
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
ServerSocket server=new ServerSocket(5678);
Socket client=server.accept();
byte[] b="关".getBytes("utf8");
client.getOutputStream().write(b);
// byte[] b="Hello".getBytes("utf8");
// client.getOutputStream().write(b);
client.close();
} static void Main(string[] args)
{
System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient("localhost", 5678);
byte[] b = new byte[1024];
int i = client.GetStream().Read(b, 0, b.Length);
string s = System.Text.Encoding.UTF8.GetString(b, 0, i); client.Close();
}虽然java和C#中byte范围不同的,但是对于Java中的负值,C#自动加上256变成自己的数据范围。
这个直接可以在C#中进行测试,代码如下 static void Main(string[] args)
{
int i = -27;
byte testbyte = (byte)i;
}testbyte的值为229。