(char)System.in.read()对于输入的汉字,为何显示为‘?’
对于汉字在java中以unicode码存放,个人以为截取其中的8位再强制转换为char,可是结果总为‘?’,请指教

解决方案 »

  1.   

    截取8位肯定是?,io里面是不是有个readUTF()?
      

  2.   

    为什么不用BufferedReader的readLine来读
    char应当只是表示一个8位组,一个汉字可能有多个8位组
      

  3.   

    举个例子
    '我'这个字符对应的UTF-8编码是1100,1110,1101,0010
    而read()这个方法只是读取输入流的下一个字节,并将其转成int返回
    所以你得到的实际上是
    0000,0000,0000,0000,0000,0000,1100,1110
    接下来你把这个砍成char,就变成了0000,0000,1100,1110
    显示出来就是'?'
      

  4.   

    '?'的ascii是63,即111111,怎么会是0000,0000,1100,1110?请说明
      

  5.   

    read()  应该是读取了一个字节,而一个汉字却是两个字节,当然出错了,
      

  6.   

    BufferedReader br =new BufferedReader (new InputStreamReader(System.in));
    String s=br.readLine();
    System.out.println(s);
      

  7.   

    试试上面的代码,把java里的流和字节在补补吧
      

  8.   

    0000,0000,1100,1110
    就是U+00CE
    查了查是
     'Î' 这东西..
    <noinclude> (i-circumflex) 是罗马尼亚语和库尔德语北部方言的一个字母。这个字母在法语、瓦龙语中,也作变音字母使用。 
    在罗马尼亚语中,这个字母排在字母表的第 12 位,表示 /&#616;/ 音(与 &acirc; 字的发音相同)。 
    反正就是显示不出来,所以就用'?'替代.并不是说对应的是'?'.总比拿个空格之类的替代好吧.
      

  9.   

    import java.io.*;
    public class Test
    {
    public static void main(String [] args) throws IOException{
    System.out.println("input your value: ");
    BufferedReader br =new BufferedReader (new InputStreamReader(System.in));
    String s=br.readLine();
    System.out.println(s);
    }

    }
      

  10.   

    谢谢大家,特别是有心的zephyr_cc
      

  11.   

    更正一下,
    "'我'这个字符对应的UTF-8编码是1100,1110,1101,0010"
    应该是gb2312编码,记糊涂了~