(char)System.in.read()对于输入的汉字,为何显示为‘?’

htyy521 2007-09-13 06:46:46
(char)System.in.read()对于输入的汉字,为何显示为‘?’
对于汉字在java中以unicode码存放,个人以为截取其中的8位再强制转换为char,可是结果总为‘?’,请指教
...全文
324 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zephyr_cc 2007-09-19
  • 打赏
  • 举报
回复
更正一下,
"'我'这个字符对应的UTF-8编码是1100,1110,1101,0010"
应该是gb2312编码,记糊涂了~
htyy521 2007-09-16
  • 打赏
  • 举报
回复
谢谢大家,特别是有心的zephyr_cc
jige_hanhan 2007-09-14
  • 打赏
  • 举报
回复
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);
}

}
zephyr_cc 2007-09-14
  • 打赏
  • 举报
回复
0000,0000,1100,1110
就是U+00CE
查了查是
'Î' 这东西..
<noinclude> (i-circumflex) 是罗马尼亚语和库尔德语北部方言的一个字母。这个字母在法语、瓦龙语中,也作变音字母使用。
在罗马尼亚语中,这个字母排在字母表的第 12 位,表示 /ɨ/ 音(与 â 字的发音相同)。
反正就是显示不出来,所以就用'?'替代.并不是说对应的是'?'.总比拿个空格之类的替代好吧.
jige_hanhan 2007-09-14
  • 打赏
  • 举报
回复
试试上面的代码,把java里的流和字节在补补吧
jige_hanhan 2007-09-14
  • 打赏
  • 举报
回复
BufferedReader br =new BufferedReader (new InputStreamReader(System.in));
String s=br.readLine();
System.out.println(s);
frilly 2007-09-14
  • 打赏
  • 举报
回复
read() 应该是读取了一个字节,而一个汉字却是两个字节,当然出错了,
htyy521 2007-09-14
  • 打赏
  • 举报
回复
'?'的ascii是63,即111111,怎么会是0000,0000,1100,1110?请说明
zephyr_cc 2007-09-13
  • 打赏
  • 举报
回复
举个例子
'我'这个字符对应的UTF-8编码是1100,1110,1101,0010
而read()这个方法只是读取输入流的下一个字节,并将其转成int返回
所以你得到的实际上是
0000,0000,0000,0000,0000,0000,1100,1110
接下来你把这个砍成char,就变成了0000,0000,1100,1110
显示出来就是'?'
huoyin 2007-09-13
  • 打赏
  • 举报
回复
为什么不用BufferedReader的readLine来读
char应当只是表示一个8位组,一个汉字可能有多个8位组
syhan 2007-09-13
  • 打赏
  • 举报
回复
截取8位肯定是?,io里面是不是有个readUTF()?

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧