社区
Java SE
帖子详情
郁闷!汉字内码的问题!
zhang21cnboy
2003-07-11 02:45:19
偶碰到了很恶心的问题!
字符串大小的比较,根据java的文档介绍,两个字符比较的时候,是根据内码比较的,那么就是说 '路' 比 '座'小,是不是呢?
可是偶这么用的时候,简直把我折磨死了,'路' 比 '座'得编码大,我采用的是GBK编码,根据GBK编码表:‘路’的编码为:c2b7,‘座’是d7f9.,可是当我用java程序输出的时候,变成了:‘路’:8def,‘座’:5ea7!
这让我简直要发疯了,不管用什么编码,‘座’要比'路'大才可以啊!
这到底是怎么一回事呢?
...全文
75
7
打赏
收藏
郁闷!汉字内码的问题!
偶碰到了很恶心的问题! 字符串大小的比较,根据java的文档介绍,两个字符比较的时候,是根据内码比较的,那么就是说 '路' 比 '座'小,是不是呢? 可是偶这么用的时候,简直把我折磨死了,'路' 比 '座'得编码大,我采用的是GBK编码,根据GBK编码表:‘路’的编码为:c2b7,‘座’是d7f9.,可是当我用java程序输出的时候,变成了:‘路’:8def,‘座’:5ea7! 这让我简直要发疯了,不管用什么编码,‘座’要比'路'大才可以啊! 这到底是怎么一回事呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
DanielYWoo
2003-07-14
打赏
举报
回复
试试这个,我常用的
DanielYWoo
2003-07-14
打赏
举报
回复
package tests.tips;
import java.util.*;
import java.text.CollationKey;
import java.text.Collator;
public class ChineseSortSample
{
public ChineseSortSample()
{
}
public void normalSort(ArrayList arrayList)
{
Collections.sort(arrayList);
System.out.println("normal sort result:");
System.out.println(arrayList);
}
public void chineseSort(ArrayList arrayList)
{
ArrayList newArray = new ArrayList();
//liucheng, see this the following lines
Collator collator = Collator.getInstance(Locale.CHINA);
for (int i = 0; i < arrayList.size(); i++) {
CollationKey key = collator.getCollationKey( (String) arrayList.get(
i));
newArray.add(key);
}
Collections.sort(newArray);
System.out.println("chinese sort result:");
boolean first = true;
Iterator iterator = newArray.iterator();
System.out.print("[");
while (iterator.hasNext()) {
if (first) {
first = false;
} else {
System.out.print(", ");
}
CollationKey key = (CollationKey) iterator.next();
System.out.print(key.getSourceString());
}
System.out.println("]");
//end
}
public void show(ArrayList arrayList)
{
normalSort(arrayList);
chineseSort(arrayList);
}
public static void main(String[] args)
{
String testStr;
if (args.length > 0) {
testStr = args[0];
} else {
testStr = "\u8FD9\u662F\u4E00\u4E2A\u6D4B\u8BD5\u7A0B\u5E8F\uFF0C\u770B\u662F\u5426\u80FD\u591F\u6309\u7167\u4E2D\u6587\u62FC\u97F3\u7684\u82F1\u6587\u5B57\u6BCD\u6765\u6392\u5E8F";
}
ChineseSortSample chineseSortSample1 = new ChineseSortSample();
char[] charArray = testStr.toCharArray();
ArrayList arrayList = new ArrayList();
for (int i = 0; i < charArray.length; i++) {
arrayList.add(String.valueOf(charArray[i]));
}
chineseSortSample1.show(arrayList);
}
}
yefc
2003-07-12
打赏
举报
回复
去用java.text.Collator
honkyjiang
2003-07-11
打赏
举报
回复
public class encode {
public static void main(String[] args){
byte[] bys1 = "路".getBytes();
byte[] bys2 = "座".getBytes();
System.out.println("compare0 == " + ("路".compareTo("座"))); //12104
String str1=null,str2=null;
try{
str1 = new String(bys1,"utf8");
str2 = new String(bys2,"utf8");
System.out.println("compare1 == " + (str1.compareTo(str2)));//-65350
}catch(Exception e){
}
try{
str1 = new String(bys1,"UTF-16BE");
str2 = new String(bys2,"UTF-16BE");
System.out.println("compare2 == " + (str1.compareTo(str2))); //-5442
}catch(Exception e){
System.out.println(e);
}
try{
str1 = new String(bys1,"ISO-8859-1");
str2 = new String(bys2,"ISO-8859-1");
System.out.println("compare3 == " + (str1.compareTo(str2)));//-21
}catch(Exception e){
}
}
}
zhang21cnboy
2003-07-11
打赏
举报
回复
Unicode编码里面,没有拼音的顺序?
转换了,还是不行!
schwarzenegger
2003-07-11
打赏
举报
回复
JAVA内部是UNICODE编码,用String.getByte("编码")把字符串转换成指定编码
schwarzenegger
2003-07-11
打赏
举报
回复
java用unicode而不是gbk,转换成gbk再比较
Java的中文编程与配置心得
Java的中文
问题
历史悠久,连绵不绝,至今也没有完全解决,但是上有政策下有对策,我们总是有办法搞定它的。跟Java相关的中文
问题
主要有两类,一类是编程的
问题
,涉及到I/O,
内码
转换等。第二类是Java运行环境的配置,涉及字体,属性配置等。我刚刚用了一天的时间解决这些
问题
,觉得很有必要给自己写个备忘录之类的。 我看还是从
问题
入手吧,这样不致于让大家打瞌睡。我想写个程序,这个程序有个基本功能就是显示...
中文java_java中文编程
Java的中文
问题
历史悠久,连绵不绝,至今也没有完全解决,但是上有政策下有对策,我们总是有办法搞定它的。跟Java相关的中文
问题
主要有两 类,一类是编程的
问题
,涉及到I/O,
内码
转换等。第二类是Java运行环境的配置,涉及字体,属性配置等。我刚刚用了一天的时间解决这些
问题
,觉得很有 必要给自己写个备忘录之类的。我看还是从
问题
入手吧,这样不致于让大家打瞌睡。我想写个程序,这个程序有个基本功能就是显示...
16/24点阵字库(经典)
比如
汉字
“中”的
内码
是0xd6d0,而他的区位码是5448.这个是怎么转换的呢?区位码不是
内码
减去0xa0a0吗?怎么算的呢?
问题
补充: 找到答案了:
汉字
机
内码
、国标码和区位码三者之间的关系为: 区位码(十进制)的两个字节分别转换为十六进制后加20H得到对应的国标码; 机
内码
是
汉字
交换码(国标码)两个字节的最高位分别加1,即
汉字
交换码(国标码)的两个字节分
java 修改jar中的menifest.mf文件后重新打包过程中遇到的中文
问题
解决
前段时间在做一个项目,碰到了要将jar文件中的menifest.mf文件中的某项修改一下,由于修改后的内容中含有中文,总是在重新打包后,运行时发现jar失效,很是
郁闷
,不知道
问题
出在哪里,一开始以为是自己设置的编码方式由
问题
,将utf-8格式的改成utf-16,utf-16LE,utf-16be等等,还是没有效果,用ultra打开原文件和修改后的文件比较,一开始没发现
问题
,总觉得及时最后有点空格不影响,当然空格看不出来,知道转换成
内码
的时候才发现后面多了很多00 00 00 00,难
点阵字库
比如
汉字
“中”的
内码
是0xd6d0,而他的区位码是5448.这个是怎么转换的呢?区位码不是
内码
减去0xa0a0吗?怎么算的呢?
问题
补充: 找到答案了:
汉字
机
内码
、国标码和区位码三者之间的关系为: 区位码(十进制)的两个字节分别转换为十六进制后加20H得到对应的国标码; 机
内码
是
汉字
交换码(国标码)两个字节的最高位分别加1,即
汉字
交换码(国标码)的两个字节分别加80H
Java SE
62,615
社区成员
307,307
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章