一个java乱码的问题

C、C++和Java语言
回复
cgk100
帖子: 60
注册时间: 2007-04-22 10:03
来自: china
送出感谢: 0
接收感谢: 0
联系:

一个java乱码的问题

#1

帖子 cgk100 » 2007-10-08 22:12

package bs;

import java.io.UnsupportedEncodingException;

public class Zh {
public static String asc2gb(String asc) {
String ret;

if (asc == null)
return asc;
try {
ret = new String(asc.getBytes("ISO-8859-1"), "GB2312");
} catch (UnsupportedEncodingException e) {
ret = asc;
}
return ret;
}

public static String gb2asc(String gb) {
String ret;
if (gb == null)
return gb;
try {
ret = new String(gb.getBytes("GB2312"), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
ret = gb;
}
return ret;
}

public static String iso2utf(String iso) {
String ret;
if (iso == null)
return iso;
try {
ret = new String(iso.getBytes("ISO-8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
ret = iso;
}
return ret;
}

public static void main(String[] args) {
Zh zh = new Zh();
System.out.println(zh.iso2utf("2323niaddf对反ds"));

}

}

我这是在ubuntu平台下写的,但是那些中文都不显示,显示的是?? 为什么
头像
AutumnHealth
帖子: 776
注册时间: 2006-12-20 18:41
送出感谢: 0
接收感谢: 0
联系:

#2

帖子 AutumnHealth » 2007-10-09 18:17

Java中的String 表示一个 UTF-16 格式的字符串
而你的iso2utf()方法参数是一个iso编码的字符串,你把一个UTF-16的字符串传进去,结果iso.getBytes("ISO-8859-1")方法把两个字节的字符串截取成一个字节,中文部分当然就剩一个问号了。

我加了一个utf2iso()方法,先把String转换成iso-8859-1编码的字符串,然后就传到你的iso2utf()方法中得到的就是正确的。
代码如下:

代码: 全选

  public static String utf2iso(String utf) {
    String ret;
    if(utf == null)
      return utf;
    try {
      ret = new String(utf.getBytes("UTF-8"), "ISO-8859-1");
    } catch (UnsupportedEncodingException e) {
      ret = utf;
    }
    return ret;
  }
  
  public static void main(String[] args) {
    String iso = utf2iso("2323niaddf对反ds");
    String utf = iso2utf(iso);
    System.out.println(iso);
    System.out.println(utf);
    System.out.println(iso2utf("2323niaddf对反ds"));
  }
执行结果:
2323niaddf??????ds
2323niaddf对反ds
2323niaddf??ds

至于为什么utf转成iso后中文会变成两个问号,你再仔细想想吧 :D

另外,你所有的方法都是static的,还有必要new一个Zh对象出来吗?
上次由 AutumnHealth 在 2007-10-09 22:27,总共编辑 1 次。
尽情享受生活~

Welcome to AutumnHealth's blog:
http://forum.ubuntu.org.cn/weblog.php?w=1421
http://blog.csdn.net/autumnhealth
头像
stlxv
论坛版主
帖子: 8273
注册时间: 2006-05-03 0:39
来自: المريخ
送出感谢: 0
接收感谢: 1 次

#3

帖子 stlxv » 2007-10-09 18:29

你们就不能排一下版吗?
PHP是最好的语言!不服来战!
cgk100
帖子: 60
注册时间: 2007-04-22 10:03
来自: china
送出感谢: 0
接收感谢: 0
联系:

谢谢

#4

帖子 cgk100 » 2007-10-09 19:02

谢谢二楼的兄弟,我现在明白一些了
:D
头像
AutumnHealth
帖子: 776
注册时间: 2006-12-20 18:41
送出感谢: 0
接收感谢: 0
联系:

#5

帖子 AutumnHealth » 2007-10-09 22:25

stlxv 写了:你们就不能排一下版吗?
编辑器里排得好好的,copy过来后,在编辑框里还有空格,发表之后没想到就变这样了。。。 -_-
尽情享受生活~

Welcome to AutumnHealth's blog:
http://forum.ubuntu.org.cn/weblog.php?w=1421
http://blog.csdn.net/autumnhealth
头像
AutumnHealth
帖子: 776
注册时间: 2006-12-20 18:41
送出感谢: 0
接收感谢: 0
联系:

#6

帖子 AutumnHealth » 2007-10-09 22:28

明白了,得用

代码: 全选

括起来,空格才有效
尽情享受生活~

Welcome to AutumnHealth's blog:
http://forum.ubuntu.org.cn/weblog.php?w=1421
http://blog.csdn.net/autumnhealth
wkt
帖子: 849
注册时间: 2006-09-07 22:51
送出感谢: 0
接收感谢: 0
联系:

#7

帖子 wkt » 2007-10-09 23:04

java好像不用搞什么就中文显示了啊!
cgk100
帖子: 60
注册时间: 2007-04-22 10:03
来自: china
送出感谢: 0
接收感谢: 0
联系:

#8

帖子 cgk100 » 2007-10-09 23:09

这个是与平台有关系的,在linux下是需要编码转换的,不然会乱码的,是需要的。
wkt
帖子: 849
注册时间: 2006-09-07 22:51
送出感谢: 0
接收感谢: 0
联系:

#9

帖子 wkt » 2007-10-09 23:28

我什么也没有搞
linux@debian:/tmp
-0-$ cat j.java
class j{
public static void main(String s[])
{
System.out.println("java 对世界说hello");
}
}

linux@debian:/tmp
-0-$ javac j.java && java j
java 对世界说hello
linux@debian:/tmp
-0-$
cgk100
帖子: 60
注册时间: 2007-04-22 10:03
来自: china
送出感谢: 0
接收感谢: 0
联系:

你理解错误了

#10

帖子 cgk100 » 2007-10-09 23:32

你这个是直接写的汉字,自然是当前系统可以识别的编码了,所以可以显示的,但是很多时候,比如从文件中获取数据,那些数据的编码可能就不是当前系统默认的,那样读取的时候就需要编码转换的
头像
AutumnHealth
帖子: 776
注册时间: 2006-12-20 18:41
送出感谢: 0
接收感谢: 0
联系:

#11

帖子 AutumnHealth » 2007-10-09 23:48

wkt 写了:java好像不用搞什么就中文显示了啊!
Java编码转换在网络编程上用得比较多
尽情享受生活~

Welcome to AutumnHealth's blog:
http://forum.ubuntu.org.cn/weblog.php?w=1421
http://blog.csdn.net/autumnhealth
cgk100
帖子: 60
注册时间: 2007-04-22 10:03
来自: china
送出感谢: 0
接收感谢: 0
联系:

是的

#12

帖子 cgk100 » 2007-10-09 23:50

是的,在网络数据抽取中用的非常多,我也是在做这方面的时候才需要查询这方面资料的,希望大家在这方面有经验的多讲一些。
回复

回到 “C/C++/Java”