关于转义字符和编码转换函数的研究
来源:互联网 发布:电信云计算待遇 编辑:程序博客网 时间:2024/05/16 07:31
(本文为个人原创,转载请著名出处)
由于本人想做一个学校图书馆检索书的Android客户端以方便同学们查书,需要从学校图书馆网站上抓取信息。今天在分析学校官网源代码是被一串乱码难住如下:
—————————————————————————————————————————————————————————————
由于本人想做一个学校图书馆检索书的Android客户端以方便同学们查书,需要从学校图书馆网站上抓取信息。今天在分析学校官网源代码是被一串乱码难住如下:
—————————————————————————————————————————————————————————————
“1.三体I247.55/77”
这串乱码的实际意义是:
“1.三体 I247.55/77”(其中“三体”是书名“I247.55/77”是书籍位置编号)
—————————————————————————————————————————————————————————————
这串乱码的实际意义是:
“1.三体 I247.55/77”(其中“三体”是书名“I247.55/77”是书籍位置编号)
—————————————————————————————————————————————————————————————
以上内容都是在编软件时重要的数据 ,我必定要把其转为汉字字符串才能使用。于是乎开始研究规律,在查询了大量资料和加密转码上面的中文字符串后发现是unicode编码的变形(尼玛花了我一个小时)。标准的unicode编码是"\u0032"这样的,组成为“\u”和后面四位十六进制数字组成。所以上面的乱码应该解码为:
—————————————————————————————————————————————————————————————
“1.\u4e09;\u4f53;\u0049;\u0032;\u0034;\u0037;\u002e;\u0035;\u0035;\u002f;\u0037;\u0037;”
—————————————————————————————————————————————————————————————
这在java中很容易只要把字符串中的“&#x”替换成“\u”,就行了。关键就是这里 ,你要是直接替换“\u”,编译器会告诉你这不是合法的转义字符,不能替换。那好根据我们学的知识改成“\\u”。ok了!可以转换了,字符串也转成了后者的模样。但是尼玛输出也是后面这样不能忍啊,我要的可是中文字符串啊。在研究了replace函数和replaceAll和正则表达式后仍然没有头绪。其实简单化的话就是这样的:
问题:GB2312转成Unicode编码
比如:
System.out.println(s1);
代码如下:
问题虽小,却也花了我一下午的时间,希望在各位再次碰到这个问题时候能给各位提供帮助
—————————————————————————————————————————————————————————————
“1.\u4e09;\u4f53;\u0049;\u0032;\u0034;\u0037;\u002e;\u0035;\u0035;\u002f;\u0037;\u0037;”
—————————————————————————————————————————————————————————————
这在java中很容易只要把字符串中的“&#x”替换成“\u”,就行了。关键就是这里 ,你要是直接替换“\u”,编译器会告诉你这不是合法的转义字符,不能替换。那好根据我们学的知识改成“\\u”。ok了!可以转换了,字符串也转成了后者的模样。但是尼玛输出也是后面这样不能忍啊,我要的可是中文字符串啊。在研究了replace函数和replaceAll和正则表达式后仍然没有头绪。其实简单化的话就是这样的:
问题:GB2312转成Unicode编码
比如:
String s="\u4f53";
System.out.println(s);
//这里输出的就是中文的“体”字
String s1="\\u4f53";System.out.println(s1);
//这里输出的是“\u4f53”
而我们想让后者也就是s1输出
“体”字。这里个位看官们可以自己动脑想下应该怎么写个s1转换函数使其转换成汉字。我自己比较笨,经过了好久差了半天jdk的api才解决,牵扯到正则表达式和进制转换。具体大家可以查api和转换方面的知识,懒人也可以直接饮用。其他语言思路也应该差不多;代码如下:
public static String toCN(String str)
{
StringBuffer gbk = new StringBuffer();
try
{
//注意,分隔符是:"\\\\u"
String[] hex = str.split("\\\\u");
//注意要从 1 开始,而不是从0开始。第一个是空。
for(int i=1;i<hex.length;i++)
{
//将16进制数转换为 10进制的数据。
int data = Integer.parseInt(hex[i],16);
//强制转换为char类型就是我们的中文字符了。
gbk.append((char)data);
}
}
catch(Exception e)
{
//设定异常信息的内容
e.printStackTrace();
}
return gbk.toString();
}
问题虽小,却也花了我一下午的时间,希望在各位再次碰到这个问题时候能给各位提供帮助
0 0
- 关于转义字符和编码转换函数的研究
- 关于计算机字符编码的研究
- 关于xml 和 html 的转义字符
- 关于URL转义字符(URL编码)的问题
- 关于URL转义字符(URL编码)的问题
- 关于URL转义字符(URL编码)的问题
- java字符编码转换研究
- java字符编码转换研究
- Java字符编码转换研究
- java字符编码转换研究
- java字符编码转换研究
- java字符编码转换研究
- java字符编码转换研究
- java字符编码转换研究
- 字符串转换函数和字符编码
- 字符编码转换函数
- 关于iconv字符编码的转换
- mb_convert_encoding 函数的使用 转换字符编码
- Deep Learning 系列(1):RBM(受限波尔兹曼机)和 DBN(深信度神经网络)
- SwitchButton 开关按钮 的多种实现方式 (附源码DEMO)
- Android平台软件体系浅注
- MySQL创建函数错误
- startup.bat
- 关于转义字符和编码转换函数的研究
- eclipse,myeclipse安装gwt插件
- 外部表
- MFC绘制动态曲线,用双缓冲绘图技术防闪烁
- web研发书籍推荐
- Invoke()方法的使用(转载)
- MTK 6573工程目录结构
- java中实例化Class类对象的三种方式
- 审计