散100分,问简单的字符集转换问题。。新年快乐~

vvpang 2006-02-08 04:57:29
程序如下

public static void main( String[] args ){
String c = "新年快乐" ;
try{
String cIso = new String( c.getBytes( "gbk" ) , "iso8859-1" ) ;
String cUtf = new String( c.getBytes( "gbk" ) , "utf-8" ) ;
System.out.println( "c:" + c + " cIso:" + cIso + " cUtf:" + cUtf ) ;

String cIsoc = new String( cIso.getBytes( "iso8859-1" ) , "gbk" ) ;
String cUtfc = new String( cUtf.getBytes( "utf-8" ) , "gbk" ) ;
System.out.println( "c:" + c + " cIsoc:" + cIsoc + " cUtfc:" + cUtfc ) ;
}
catch ( UnsupportedEncodingException e ){
}
}

我运行的结果如下:

c:新年快乐 cIso:???ê?ì?? cUtf:???????
c:新年快乐 cIsoc:新年快乐 cUtfc:锟斤拷锟斤拷锟斤拷锟?


注:我本地编译的字符集为 gbk


应该怎么解决,才能让 cUtfc 得到正确的结果?

...全文
531 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
CalvinKyle 2006-02-10
  • 打赏
  • 举报
回复
是什么原因呢?我怎么还是不太清楚?
String s="新年快乐";
String news=new String(s.getBytes(),"UTF8");
news=new String(news.getBytes("utf8"),"GBK");

为什么news就复远不了了呢?
vvpang 2006-02-10
  • 打赏
  • 举报
回复
哦。。

谢谢大家。。。结帖子了。
feeboby 2006-02-09
  • 打赏
  • 举报
回复
jf
TinyJimmy 2006-02-09
  • 打赏
  • 举报
回复
javac -encoding XXX ...
java -Dfile.encoding=XXX ...
TinyJimmy 2006-02-09
  • 打赏
  • 举报
回复
你编译的encoding是8859-1, 而运行的环境是GBK. 因此得到上述结果.

不使用编译工具, 直接使用命令行运行, 自己试一试, 看能否得到你要的结果.

javac -encoding XXX ...
java -Dfile.encoding ...
逍遥小飞狼 2006-02-09
  • 打赏
  • 举报
回复
关注,并接分~~
低调的小青蛙 2006-02-09
  • 打赏
  • 举报
回复
搂主概念有误,请:

http://www.regexlab.com/zh/encoding.htm
yangyijieyyj 2006-02-09
  • 打赏
  • 举报
回复
utf-16 好像可以。不知为何?还请高手解答
caval 2006-02-09
  • 打赏
  • 举报
回复
?

UTF-8
vvpang 2006-02-09
  • 打赏
  • 举报
回复
我当前的运行环境的编码格式是 gbk 的。

楼上的有调出来的程序吗?

放个调OK的代码出来啊。。
sTrawman2005 2006-02-09
  • 打赏
  • 举报
回复
/**字符串转化为ASCII*/
public String ChineseStringToAscii(String s)
{
try
{
CharToByteConverter toByte = CharToByteConverter.getConverter("gb2312");
byte[] orig = toByte.convertAll(s.toCharArray());
char[] dest = new char[orig.length];
for (int i=0;i<orig.length;i++)
dest[i] = (char)(orig[i] & 0xFF);
return new String(dest);
}
catch (Exception e)
{
System.out.println(e);
return s;
}
}

/**Unicode转化成GB的源码*/
public String UnicodetoGB(String s)
{
StringBuffer sb = new StringBuffer();
boolean escape = false;
for(int i=0; i<s.length(); i++)
{
char c = s.charAt(i);
switch (c)
{
case '\\': escape = true; break;
case 'u':
case 'U':
if(escape)
{
try
{
sb.append((char)Integer.parseInt(s.substring(i+1,i+5),16));
escape = false;
}
catch(NumberFormatException e)
{
throw new IllegalArgumentException();
}
i += 4;
}
else
{
sb.append(c);
}
break;
default:sb.append(c); break;
}
}
return sb.toString();
}
/*ASCII转化为字符串*/
public String AsciiToChineseString(String s)
{
char[] orig = s.toCharArray();
byte[] dest = new byte[orig.length];
for (int i=0;i<orig.length;i++)
dest[i] = (byte)(orig[i]&0xFF);
try
{
ByteToCharConverter toChar = ByteToCharConverter.getConverter("gb2312");
return new String(toChar.convertAll(dest));
}
catch (Exception e)
{
System.out.println(e);
return s;
}
}
/**转换编码*/
public String toGBK(String str)
{
try
{
str=new String(str.getBytes("ISO-8859-1"),"GBK"); //using the ISO-8859-1 charset and change to GBK
}catch (Exception e) {}
return str;
}

/**UTF8*/
public String toUtf8String(String src)
{
byte[] b = src.getBytes();//using the platform's default charset
char[] c = new char[b.length];
for(int i=0;i<b.length;i++)
{
c[i] = (char)(b[i]&0x00FF);
}
return new String(c);
}

public String toASCII(String str)
{
try
{
str=new String(str.getBytes("GBK"),"ISO-8859-1"); //chang str from GBK to ISO
}catch (Exception e) {}
return str;
}
希望有所帮助............
yuzl32 2006-02-09
  • 打赏
  • 举报
回复
to vvpang (NullPointerException)

有些字符集相互转换必然会丢失一些信息.
netpotRL 2006-02-09
  • 打赏
  • 举报
回复
得不到结果的~~
caval 2006-02-09
  • 打赏
  • 举报
回复
不可能实现
vvpang 2006-02-09
  • 打赏
  • 举报
回复
cmd里,
javac -encoding XXX ...
java -Dfile.encoding=XXX ...


用这2个命令,我都试了。。都不行了。。

大家也可以试试。。。奇怪啊。
vvpang 2006-02-09
  • 打赏
  • 举报
回复
楼上的意思是说,我的那个结果是OK的。。

是得不到正确结果的。。是吗?
wangx1949 2006-02-09
  • 打赏
  • 举报
回复
概念性问题...
burn3tt 2006-02-08
  • 打赏
  • 举报
回复
UTF-8才是正解,
feixiang2005 2006-02-08
  • 打赏
  • 举报
回复
提醒你一下:System.out.println
输出的是根据你当前运行环境的默认的编码格式,编码过的,即系统又帮你转了一次
caval 2006-02-08
  • 打赏
  • 举报
回复
public static void main( String[] args ){
String c = "新年快乐" ;
try{
String cIso = new String( c.getBytes( "iso8859-1" ) ) ;
String cUtf = new String( c.getBytes( "utf-8" ) ) ;
System.out.println( "c:" + c + " cIso:" + cIso + " cUtf:" + cUtf ) ;

String cIsoc = new String( cIso.getBytes( ) , "iso8859-1" ) ;
String cUtfc = new String( cUtf.getBytes( ) ,"utf-8" ) ;
//System.out.println(cUtfc);
System.out.println( "c:" + c + " cIsoc:" + cIsoc + " cUtfc:" + cUtfc ) ;
}
catch ( UnsupportedEncodingException e ){
}
}
运行结果:
c:新年快乐 cIso:???? cUtf:鏂板勾蹇箰
c:新年快乐 cIsoc:???? cUtfc:新年快乐
怎么解决?
加载更多回复(4)

62,635

社区成员

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

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