首先我描述一下問題,我在做udp socket編程(一個聊天的程序)的時候,從控制台中讀取中文,然后再向控制台中打印,出現中文亂碼的情況。
1、出現亂碼最根本的原因就是編碼和解碼不一致的情況。問題分析,從控制台中讀取數據,數據源為控制台,輸出為亂碼,目標源也為控制台,但是在讀取和輸出的過程中有可能出現亂碼,
最簡單的例子就是控制台上的編碼為gbk,gbk是兩個字節編碼的,而utf-8是三個字節。所以會出現亂碼問題,


2、解決辦法
(1)打開eclipse或myeclipse,點擊run-》runconfigurations

如圖提示,改成UTF-8,但是這里強調一下,有的eclipse或myeclipse有可能是gbk的形式,不同形式改成不同的編碼,多嘗試一下。

這里也需要更改一下。
(2)方法二:
打開eclipse.ini文件(在eclipse的安裝目錄) 添加上這句話 -Dfile.encoding = utf-8,設置系統屬性file.encoding為utf-8.
2、附上我做的一個聊天的小程序,把ip到時候可以改成你想聊天的那個人的ip,兩邊都要運行這段代碼。
package com.hzwealth.test.chat; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * C&D聊天室 * @author lixiaochao * */ public class UdpChatTest { public static void main(String[] args) { new Thread(new UdpClientThread()).start(); new Thread(new UdpServerThread()).start(); } } /** * 發送端 * @author lixiaochao * */ class UdpServerThread implements Runnable{ @Override public void run() { try { DatagramSocket ds = new DatagramSocket(); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in,"UTF-8")); String line = null; while((line = reader.readLine())!= null){
//這里注意,我們需要寫上你對話人的ip地址。 InetAddress address = InetAddress.getByName("你的對話人的ip地址"); DatagramPacket dp = new DatagramPacket(line.getBytes(), line.getBytes().length, address, 9999); ds.send(dp); System.out.print("我說:"+line+"\n\r"); if("~over".equals(line)){ System.out.println("發送者退出"); break; } } reader.close(); ds.close(); } catch (Exception e) { e.printStackTrace(); } } } /** * 接收端 * @author lixiaochao * */ class UdpClientThread implements Runnable{ @Override public void run() { try { DatagramSocket ds = new DatagramSocket(9999); System.out.println(System.getProperty("file.encoding")); while(true){ byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, buf.length); ds.receive(dp); InetAddress address= dp.getAddress(); String msg = new String(buf, 0, buf.length,"GBK"); System.out.println(address+"說:"+msg); if("~over".equals(msg)){ break; } } ds.close(); } catch (Exception e) { e.printStackTrace(); } } }
如果有什么問題,需要大家指正!
當你的野心撐不起你的夢想時,請靜下心來學習!
當你的經濟撐不起你的欲望時,請低下頭來默默地工作!
