myeclipse,eclipse控制檯輸出亂碼問題

首先我描述一下問題,我在作udp socket編程(一個聊天的程序)的時候,從控制檯中讀取中文,而後再向控制檯中打印,出現中文亂碼的狀況。java

一、出現亂碼最根本的緣由就是編碼和解碼不一致的狀況。問題分析,從控制檯中讀取數據,數據源爲控制檯,輸出爲亂碼,目標源也爲控制檯,可是在讀取和輸出的過程當中有可能出現亂碼,編程

  最簡單的例子就是控制檯上的編碼爲gbk,gbk是兩個字節編碼的,而utf-8是三個字節。因此會出現亂碼問題,小程序

  

 

二、解決辦法eclipse

  (1)打開eclipse或myeclipse,點擊run-》runconfigurationssocket

  

  如圖提示,改爲UTF-8,可是這裏強調一下,有的eclipse或myeclipse有多是gbk的形式,不一樣形式改爲不一樣的編碼,多嘗試一下。ide

  

  這裏也須要更改一下。學習

  (2)方法二:編碼

   打開eclipse.ini文件(在eclipse的安裝目錄)  添加上這句話 -Dfile.encoding = utf-8,設置系統屬性file.encoding爲utf-8.spa

二、附上我作的一個聊天的小程序,把ip到時候能夠改爲你想聊天的那我的的ip,兩邊都要運行這段代碼。.net

  

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(); } } }

  若是有什麼問題,須要你們指正!

  當你的野心撐不起你的夢想時,請靜下心來學習!

  當你的經濟撐不起你的慾望時,請低下頭來默默地工做!

相關文章
相關標籤/搜索