怎么用楼台socket传输中文? 急!!! 首先你确定你的两台机器是否支持中文?也就是说有没有utf-8的字符集如果有的话用DataOutputStream和DataInputStream的writeUTF()和readUTF()方法 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 DataOutputStream os = new DataOutputStream(socket1.getOutputStream());os.writeUTF(str);//// bw.flush(); os.close(); 谢谢,我明天去试试,另外怎么知道Linux的机器是否支持utf8呢? 可以把String直接变成Byte[],然后写到os里面,对面作相应的修改 还不行啊,可能还和环境有关,现在我的机器中java程序都不支持中文,当里面的字符串包含中文时,用 javac xxx.java都出错了,会不会与此有关?实际使用中我的中文是从数据库中取得的,直接保存到字符串,然后通过socket发送,这种情况是否一定要先解决上面那个支持中文的问题呢? 你的是linux?我的机器也是不支持utf-8编码,中文全部都是??要想系统支持中文好象要装字符集文件吧,这个我就不太清楚了 是Linux有没有这样的说法: 即我从数据库查出来的值,没有经过处理就发出去,只要客户端接收到后进行适当的处理还是可以显示中文的? 不行。你一从数据库读出中文来,就会被java进行转换成unicode,所以你必须保证中文在每一步都被正确转换。否则一旦转换错误就再也变不回来了。对于linux系统,一般的做法可以加一个环境变量LANG=zh_CN.GBK然后写一个简单的java程序打印出中文看看是否正确,或者通过加参数javac -encoding GBK来编译class,运行的时候加参数java -Dfile.encoding=GBK -Ddefault.client.encoding=GBK -Duser.language=zh -Duser.region=CN看看中文显示是否正常。同时要保证你的数据库字符集与java一致,即你的数据库字符编码也是GBK的。否则还需要在数据库查询getString的时候进行编码转换。这样读取出来的字符串你就可以通过getBytes把中文字节流发送出去。在接收端要用相同的编码方式收取。 谢谢楼上从数据库查询到的String一定要先转换为byte吗?是不是这样:byte[] xm=resultset.getString("xm").getBytes();转换为byte[]后是否要再转为String? 我看有些是这样用的:byte[] temp_t;String temp_p;String send=new String(xm)temp_p=resultset.getString("xm");temp_t=temp_p.getBytes("iso-8859-1");String temp=new String(temp_t); 往socket写最好是转化成字节流。 to icewolf_li(冰狼)能否说详细点,谢谢! 如果你的数据库编码以及java代码的编译运行都是采用相同的编码(比如GBK),那么只要查询出来直接getBytes()就行了,比如byte[] bTmps = rs.getString("xm").getBytes();直接把bTmps往socket写就行。接收到接收到bytes之后直接new String(bTmps)即可。但如果这中间有任何环节的编码不一致,你就需要先转码再作下一步动作。比如说,你的数据库编码是iso-8859-1,java是gbk,那么就需要byte[] bTmps = (new String(rs.getString("xm").getBytes("ISO-8859-1"),"GBK")).getBytes();总之一个原则,从bytes到string和从string到bytes要保证用正确的编码来进行。 用java实现一个方法来求出一个分类下面包括哪些品牌 我想取出系统的时间按照自己的格式输出写到这不会了 求一个查找重复字府串的算法 java新手参加网易编程赛,自己测试通过,提交却出错,求助 有没有读取图片的开源JNI推荐? 关于appletviewer不能显示网页中的applet? 关于数组的问题 用jdbc连接oracle的奇怪现象,请好心人,高手进来解释一下。 原来可以这样! 判断下面2段代码,能否通过编译:①:byte b = 2; b = b + 8; ②:byte b = 2; b += 8; 请教Socket聊天室的信息广播功能 关于eclipse,急!
os.close();
当里面的字符串包含中文时,用 javac xxx.java都出错了,会不会与此有关?实际使用中我的中文是从数据库中取得的,直接保存到字符串,然后通过socket发送,这种情况是否一定要先解决上面那个支持中文的问题呢?
我的机器也是不支持utf-8编码,中文全部都是??
要想系统支持中文好象要装字符集文件吧,这个我就不太清楚了
对于linux系统,一般的做法可以加一个环境变量
LANG=zh_CN.GBK
然后写一个简单的java程序打印出中文看看是否正确,或者通过加参数
javac -encoding GBK来编译class,运行的时候加参数
java -Dfile.encoding=GBK -Ddefault.client.encoding=GBK -Duser.language=zh -Duser.region=CN
看看中文显示是否正常。同时要保证你的数据库字符集与java一致,即你的数据库字符编码也是GBK的。否则还需要在数据库查询getString的时候进行编码转换。这样读取出来的字符串你就可以通过getBytes把中文字节流发送出去。在接收端要用相同的编码方式收取。
String temp_p;
String send=new String(xm)
temp_p=resultset.getString("xm");
temp_t=temp_p.getBytes("iso-8859-1");
String temp=new String(temp_t);
直接getBytes()就行了,比如
byte[] bTmps = rs.getString("xm").getBytes();
直接把bTmps往socket写就行。
接收到接收到bytes之后直接new String(bTmps)即可。
但如果这中间有任何环节的编码不一致,你就需要先转码再作下一步动作。
比如说,你的数据库编码是iso-8859-1,java是gbk,
那么就需要
byte[] bTmps = (new String(rs.getString("xm").getBytes("ISO-8859-1"),"GBK")).getBytes();总之一个原则,从bytes到string和从string到bytes要保证用正确的编码来进行。