其中str为你那个字符串
String chinese=new String(str.getBytes(),"GB2312");

解决方案 »

  1.   

    同意楼上的。
    底下封住的两都可以实现同样的功能。试试看。
    String str = "\u865A\u7EBF";
    try
    {
      //String s1 =(String)str;
      String s1 =new String(str);
      // new String(str.getBytes(),"GBK");
      System.out.println("字符:" + s1);
    }
    catch(Exception ee6)
    {
    }
      

  2.   

    两位有没有注意到,就算你不作任何转换,直接输出"\u865A\u7EBF"都是中文的,因为System.out就算你不作任何处理他都会自动的进行转换,你们不妨试试:
    String str="\u865A\u7EBF";
    System.out.println(str);我现在碰到的问题是,如果在Swing的JTextArea 中输入的字符已经是Unicode的编码符号,我必须取得这些符号串,并把它转换为正常的中文字符,然后给其它的component使用,不知道大家是否明白我的意思
    这样处理是行不通的!
      

  3.   


    本来这个就是可以直接输出中文的,楼上步骤真是多余。如果你想在编辑时能看明白是什么意思,就用native2ascii吧,是jdk提供的工具,可以双向转换。
      

  4.   


    不好意思,还是没回答到点子上:)因为我还是不明白你的意思,是说用jtextarea编辑一个unicode的文本,然后传给另一个jtextarea,要显示成中文,是吗?
      

  5.   

    在JTextArea中当getText的时候它已经把\u865A\u7EBF当作一个字符串,而直接String str="\u865A\u7EBF";的时候并没有直接把\u865A\u7EBF简单的当作一个字符串来处理。关注。
      

  6.   

    sharetop(天生不笨)的第二次发言说对了,我大概就是像你说的那样处理,所以要做实质性的编码转换才行。我大概就要那样处理,因为在JTextArea里输入的字符被编码(Unicode码)了,我要把它转换成GB2312的正常中文,以供其它的JTextArea和其它Swing的Component使用,有什么好的解决办法吗?我对编码转换不了解,所以被卡住了:(
      

  7.   

    你只要把你系统的字符集设为GBK就可以了,会自动转换的
      

  8.   

    To:salute() 你根本就没看明白!
    因为输入的字符本身就是Unicode码,不管你的系统设成什么都是没有用的。
    说白了,我的目的就是要对Unicode码强制转换GB2312或GBK码。
      

  9.   

    我看明白了。是你的概念错了。
    UNICODE是编码,GBK是字符集。根本就不是一回事,你怎么转?
      

  10.   

    是不是这个意思:
    在一个TextField输入“4e00”文本,要求得到UNICODE码为4e00的汉字吗?
    如果是的话那么应该可以这样
    //TextField t1;
    String s1=t1.getText();
    char c1=(char)Integer.parseInt(s1,16);于是c1是UNICODE为4e00的汉字“一”.
      

  11.   

    问题还没解决!!
    我的目的就是想知道如何通过显式转换,把\u865A\u7EBF转为中文,即:"\u865A\u7EBF" ---> "虚线"注:"\u865A\u7EBF"为中文字符"虚线"的Unicode编码的表示形式
      

  12.   

    你的需求还是没明白,我是这样理解的输入:\u865A\u7EBF  (键盘输入\ u 8 6 5 a \ u 7 e b f 十二个字符)输出:虚线是这个意思吗?
      

  13.   

    class  testChar
    {
    public static void main(String[] args) 
    {
    String a=null;
    try{
    a= new String("\u865A\u7EBF");
    }catch (Exception e)
    {
    System.out.println(e);
    }
    System.out.println(a);
    }
    }
    以上代码在中文2000中正常显示!
      

  14.   

    我的意思就是要把这样的字符串(其实就是字符的Unicode码表示形式,我要还原它而已):
    "\u4E0D\u8981\u8FB9\u6846\uFF0C\u53EA\u52A0\u4E0B\u5212\u7EBF"
    转换为其真正代表的中文字符串:
    "不要边框,只加下划线"
     
      

  15.   

    pengji(彭乃超)的做法没有任何意义!!!请看的三个回复!!!
      

  16.   

    把“\u4E0D\u8981\u8FB9\u6846\uFF0C\u53EA\u52A0\u4E0B\u5212\u7EBF”作为字节串存储,然后直接打印。
      

  17.   

    我真是吃不消你们了,怎么还在搞这种问题啊。
    UNICODE是字符编码规则,GBK是字符集。
    你把你运行环境的字符集设成GBK,再把用UNICODE编码的中文字符打印出来,它会不是中文???
    竟然还是难得好贴??
      

  18.   

    你把它直接传给其它的component使用,不是显示的一样是中文嘛
      

  19.   

    to salute():你根本没有明白这里的问题。不要多说什么没用的话。现在需求是:你做两个JTextArea,其中一个显示unicode的字串,另一个显示相应的中文。你给出代码或解决方案吧。不管什么,你实现了再说吧。
      

  20.   

    首先, 纠正一下:"虚线"的四个byte依次是0xd0,0xe9,0xcf,0xdf.
    其次, 这位哥们说的是要分析一个字符串.
    假如要将人家输入的\ud0e9\ucfdf转变成String,那么第一步要做的就是分析输入字符串,解析为byte[].以"虚线"为例, byte[0]=0xd0...byte[3]=0xdf.
    第二步,构造新的字符串.
      

  21.   

    首先谢谢大家的参与,现在姑且不要讨论什么概念性问题谁对谁错.我赞同  sharetop(天生不笨)  的提议:
    //************************************************************
    to salute():你根本没有明白这里的问题。不要多说什么没用的话。现在需求是:你做两个JTextArea,其中一个显示unicode的字串,另一个显示相应的中文。你给出代码或解决方案吧。不管什么,你实现了再说吧。
    //*********************************************************
      

  22.   

    字符串中"\"是转义字符,"\u865a"是unicode中的"虚"
    但是在textarea得到的字符串其实是"\\u865a"
      

  23.   

    to  sharetop(天生不笨):
    我明白你们在讨论什么!
    要输出字符,总得有个字符集。JAVA中的字符串都是按UNICODE编码的,要以UNICODE样式输出,直接把它打出来不就得了。如果要按GBK样式输出,那就把系统字符集设为GBK,然后把它打出来,系统自己会帮你转的呀。
      

  24.   

    to  sharetop(天生不笨):
    我当然明白你们在讨论什么!
    要输出字符,总得有个字符集。JAVA中的字符串都是按UNICODE编码的,要以UNICODE样式输出,直接把它打出来不就得了。如果要按GBK样式输出,那就把系统字符集设为GBK,然后把它打出来,系统自己会帮你转的呀。
      

  25.   

    to:6leaf(大猩猩)
    就是因为你的概念一开始错了,没有把问题表达清楚,所以才导致刚开始大家都没有看懂。
    我再说一遍,JAVA中字符都是以UNICODE形式存放,而在输出的时候系统会根据系统设置自动帮你转化,包括2进制->10进制或者以某种字符集输出。你要的无非就是UNICODE不按任何字符集输出,那你把这个UNICODE字符(它的二进制)直接输出不就可以了。
    至于方法,不有人早就写了嘛。
      

  26.   

    To:salute() 
    你这样吧,你做这么一个程序(花不了你多少时间的),你马上就会明白我提出的问题了,估计你现在还不明白我的意思,sharetop的理解是正确的程序测试要求:
         建立一个Application ,在面板上建立两个JTextArea ,当你在其中一个输入Unicode编码,例如: \u865A\u7EBF  ,另外一个JTextArea显示相应的中文字符: 虚线测试过你就明白了
      

  27.   

    to salute():拜托,你高抬贵手写一段代码测试一下吧。你说的概念这里每个人都知道,关键是实现这个需求。
      

  28.   

    String str=textArea.getText();
            char[] ch=new char[str.length()];
            str.getChars(0,str.length(),ch,0);
            for(int i=2;i<str.length();i=i+6){
                String str2=new String(ch[i]+""+ch[i+1]+""+ch[i+2]+""+ch[i+3]);
                System.out.println((char)Integer.parseInt(str2,16));
            }
      

  29.   

    static public String UTF2GB(String utfString) {
        StringTokenizer st = new StringTokenizer(utfString,"\\u");
        StringBuffer sb = new StringBuffer();
        while(st.hasMoreTokens()) {
          String ii = st.nextToken();
          int x = Integer.parseInt(ii,16);
          char c = (char)x;
          sb.append(c);
        }
        return sb.toString();
      }
      

  30.   

    to sharetop:
    第一次我回复的时候的确没明白需求,但当你第二次回复后我明白了楼主的需要。
    我一直觉得出现这个问题主要是楼主对JAVA如何处理字符集和UNICODE编码的理解有偏差,而要解决只要将UNICODE直接输出就可以了,其他的不是麻烦事情。“char c1=(char)Integer.parseInt(s1,16)” ljp3000(中文昵称制订中) 也早就提出了。
    而你和6leaf觉得这个问题主要麻烦的在于对UNICODE形式字符串的操作。
    所以我没搞懂为什么你们还在讨论这个问题。
    实现程序还有很多,但不外乎直接将UNICODE形式输出。
      

  31.   

    package mytest;import java.awt.*;
    import java.lang.StringBuffer;
    import java.util.StringTokenizer;
    import javax.swing.*;
    import com.borland.jbcl.layout.*;
    import java.awt.event.*;public class myFrame extends JFrame {
      JButton jButton1 = new JButton();
      JPanel jPanel1 = new JPanel();
      JTextArea jTextArea1 = new JTextArea();
      JTextArea jTextArea2 = new JTextArea();
      XYLayout xYLayout1 = new XYLayout();  public myFrame() {
        try {
          jbInit();
        }
        catch(Exception e) {
          e.printStackTrace();
        }
      }
      public static void main(String[] args) {
        myFrame myFrame = new myFrame();
      }
      private void jbInit() throws Exception {
        jButton1.setText("change");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(ActionEvent e) {
            jButton1_actionPerformed(e);
          }
        });
        jTextArea2.setBorder(BorderFactory.createEtchedBorder());
        jTextArea2.setPreferredSize(new Dimension(160, 17));
        jTextArea1.setBorder(BorderFactory.createEtchedBorder());
        jTextArea1.setPreferredSize(new Dimension(160, 17));
        jPanel1.setLayout(xYLayout1);
        this.getContentPane().add(jButton1,  BorderLayout.SOUTH);
        this.getContentPane().add(jPanel1, BorderLayout.CENTER);
        jPanel1.add(jTextArea1, new XYConstraints(15, 119, -1, -1));
        jPanel1.add(jTextArea2, new XYConstraints(206, 119, -1, -1));
        this.show();
      }  void jButton1_actionPerformed(ActionEvent e) {
        String str=jTextArea1.getText();
        String str2="";
       // char[] ch=new char[str.length()];
       // str.getChars(0,str.length(),ch,0);
       // System.out.println(str.lastIndexOf("\\u"));
        StringTokenizer st = new StringTokenizer(str,"\\u");
        StringBuffer sb = new StringBuffer();
        while(st.hasMoreTokens()) {
          String tmpstr = st.nextToken();
          int x = Integer.parseInt(tmpstr,16);
          char c = (char)x;
          sb.append(c);
        }
        str2+=sb.toString();
        //str2=new String(str);
        /*for(int i=0;i<str.length();i=i+6){    String strtmp=new String(ch[i]+""+ch[i+1]+""+ch[i+2]+""+ch[i+3]+""+ch[i+4]+""+ch[i+5]);
        str2+=strtmp;
        }*/
        jTextArea2.setText(str2);  }
    }
    应该可以了!大家试验一下吧!
      

  32.   

    to salute() :多谢,二愣子给的代码让我明白了其实操作字串也不算太麻烦,是我想得复杂了。我一直以为有什么直接的方法。
    也许这就是唯一的处理方式了。
      

  33.   

    ljp3000(中文昵称制订中)是对的啊
    剩下来就是一个个切开然后转换再拼上了
    放在一个方法里也不是很麻烦
      

  34.   

    谢谢大家的参与!
    其实我知道用 ljp3000(中文昵称制订中)是可以实现的,
    只是我还是希望可以有更直接转换方法来解决的,结果还是没有办法,看来也只能这样一个一个的转,呵呵
    ok,结贴!
      

  35.   

    如果字串是混合的,比如有英文和unicode字符,就还是不用stringtokenizer了,比如:
    Copyright=\u5b66\u97ec\u8f6f\u4ef6\u5de5\u4f5c\u5ba4 \u7248\u6743\u6240\u6709(C)2002下面是一个完整有用的代码:  private String UnicodeToGB2312(String str){
        String res = null;
        StringBuffer sb=new StringBuffer();
        try{
          while(str.length()>0 ){
            if( str.startsWith("\\u") ){
              int x=Integer.parseInt(str.substring(2,6),16);
              sb.append((char)x);
              str=str.substring(6);
            }
            else{
              sb.append(str.charAt(0));
              str=str.substring(1);
            }
          }
          res= sb.toString();
       }
       catch(Exception e){
          e.printStackTrace(System.err);
       }
       return res;
      }