字符串乱码问题

给定字符串 String aa="中国人??"; 问号部分是一个生僻字 宋体时候不显示
现在 想获取 每个字的 unicode 也包括 乱码?? 的 unicode

最后 在 方正超大字符集下显示出来 这个字符串

怎么做?谢谢
[b]问题补充:[/b]
我没怎么说明白

现在我详细说一下问题 希望大家给些建议

首先一个xml 我去解析 用dom4j (打开xml要是不选方正超大字符集呢生僻字看到的可能就是个四方块,或者啥也没有

把这个汉字 都存在一个 字符串里了

swing里做显示 竖排那种显示 不是横排地 我知道头一个字的坐标 剩下的 就是 循环 x坐标不变 y坐标增加

现在这个 汉字字符串里有 个生僻字 用方正超大字符集显示sefont (循环完毕)显示呢

是 例如 这样:







变成问号了

要是 不做循环str.length()
一次 drawstring 这个字符串 就能显示 但不是竖排地

说地有点多 大家尽量理解吧

解决了多给分!谢谢

9个回答

想了想, 还是给你更详细的. 使用Character对象控制字符:
16位以外的字符, 需要你做特殊判断。 char 并不是一个完整的UNICODE实现。 如果要使用Surrogate区域的字符, 也就是16位以上的字符, 需要用2个char来表示你的一个Surrogate字符, 你要这么写程序:
if(Character.isSurrogatePair(c1, c2)){
int i = Character.toCodePoint(c1, c2);
//begin to display codepoint
//你可以这么做
String s = new String(Character.toChars(i));
system.out.println(s);
}
我没有大字符集字体, 无法测试, 但是原理就这样。
如何用codepoint显示一个字符, 我也不是很清楚, 等我知道了告诉你吧。 我用了一个比较笨的办法。 重新把一个16X2字节的字符包成一个字符string。

你在什么地方显示,在Swing,SWT还是在Console里面?

试试这个程序

[code="java"]package com.cnoja.j2se.charset;

import java.lang.Character.UnicodeBlock;

import junit.framework.TestCase;

public class TestUnicode extends TestCase {

@Override
protected void setUp() throws Exception {
    // TODO Auto-generated method stub
    super.setUp();
}

public void testUnicodeCharacter() {

    String val = "中国人";

    for (int i = 0; i < val.length(); i++) {
        char c = val.charAt(i);
        System.out.print("\\u" + Integer.toHexString((int) c));
    }

    System.out.println();

}

@Override
protected void tearDown() throws Exception {
    // TODO Auto-generated method stub
    super.tearDown();
}

}
[/code]

try {
String aa ="中国人??";
byte[] bb=aa.getBytes("UTF-8");
aa = new String(bb);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

char c = val.charAt(i);

System.out.print("\u" + Integer.toHexString((int) c));

是这样; :)

是要做国际化字符转换,那我上面就错了

要解决就要在未转宋体之前转,再到有字体的字体库时再转回来就OK了

你的问题, 我是不是可以这么理解:
你字符里有一个特殊字符, 但是按 char c = str.charAt(i) 这么显示。 结果显示2个 ?。 是不是这样:

char 是16位的, 你的字符已经超过了2个字节, 因此,这个时候, 这么做要出问题了。 你还是选择系统系统的竖写的功能吧, 不要自己搞竖的这个东西。

先用 String.charAt(i)做循环得到char[],然后在Swing中一个一个显示出来。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问