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

  若是有什么问题,须要你们指正!

  当你的野心撑不起你的梦想时,请静下心来学习!

  当你的经济撑不起你的欲望时,请低下头来默默地工做!

相关文章
相关标签/搜索