「转码学java」转码学什么好
今天给各位分享转码学java的知识,其中也会对转码学什么好进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、JAVA 转码问题
- 2、java转码问题
- 3、java怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
- 4、java 字符串 转码
- 5、java文件读取内容转码
- 6、关于JAVA中中文字符的转码问题?
JAVA 转码问题
那个数据库并不能自动地处理汉字,相当于它把所有数据当成单字节来处理,因此,数据倒底是什么取决于读取它的程序如何理解,数据库本身只负责保存 byte 而不是我们期望的 char。
US7ASCII 是单 byte,而汉字是至少双byte.
所以,如果不做任何转换的话,处理过程中写入和读出都要使用相同的字符集才能理解它,但我们不应该依然数据库服务器和应用服务器或操作系统的字符集是什么,如果不做转换就要求应用服务器,操作系统,数据库的操作系统这些地方都有一致的约定,而实际上这不现实,你不能要求客户的机器按你的要求做,它们现在用 US7ASCII 就表示它们以前有其它系统也用这个数据库,因此你不能再提出任何假设,只能自己用技术方法消化掉。
因此我们要在处理中将汉字保存到数据库之前就事先转换成纯粹的 ASCII 字符串,像 \u0A0c 啥的。String 有一个叫 codePoint 的数字,它是 Unicode Code Point,我们在判断它是非 ASCII 字符时 ( 256) 时通过翻译把它变成 \u0A0C 再保存,读取时发现了 \u0A0C 再翻译回来。
这本身就是我们在保存 Properties 文件时做的那样,记得 Struts 之类的那个 Properties ResourceBundle 么,我们在 命令行做 native2ascii 时就是这么做的,反编译一下 JDK 的 tools.jar 里面的那个类来看源码,这个转换其实很简单的,我们把 JDK native2ascii 功能嵌入到你的程序中,凡是可能包括汉字的字段(比如,名字,地址,描述)都来一次转换。
下面反编译它,写出(编码过程特简单),读出(解码过程略复杂)需要按长度来试探,并且在未读取完整时把余下的零头先缓存起来,等后面几个字节读取出来之后再拼起来尝试是否是一个\u 开头的符号。当然就算看不明白也没关系,把这段代码的变量改个名字原样贴到你的代码中用就行了,只是我们需要修改那个 Main.class,因为它是命令行程序,有一个 System.exit() 调用需要去掉,另外把收集参数的地方改成我们直接传入参数。
java转码问题
\u65b0这是一个字符,
但是\\u65b0不是一个字符, 它已经被转义为\u65b0--6个字节了,
你再看一下""\u65b0"--没有特殊字符,在几种字符集中都是一样,
所以转码还是一样的效果
----------------------------------------------------------------------------
下面是扩展部分:
String(byte[], String charSet)
参数:byte解码后的字节数组, charSet指定字符集
地位:String类中重要的构造器
作用:将byte字节数组内容解码为charSet字符集
其中重要编码方法:
byte[]编码方法String中的getByte()//使用系统默认的字符集编码
byte[]编码方法String中的getByte(String charSet)//指定解码字符集编码
----------------------------------------------------------------------------------------
===清山
java怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
通过JDK1.6知道String类中getBytes(”编码“)方法可以讲一个数用指定的编码转成一个字节数组,String中通过指定的 charset解码指定的 byte 数组,构造一个新的 String。代码如下:
try{
String s = "java学习";
System.out.println(s);
String result = new String(s.getBytes("GB2312"),"iso-8859-1");
System.out.println(s);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
扩展资料:
getBytes() 方法有两种形式:
1、getBytes(String charsetName): 使用指定的字符集将字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
2、getBytes(): 使用平台的默认字符集将字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
参考资料:
百度百科-getBytes()
java 字符串 转码
import java.io.UnsupportedEncodingException;
public class ZhuanMa {
public static void main(String[] args) {
String a, b, c1,c2;
a = new String("你好a!");
try {
b = new String(a.getBytes("ISO-8859-1"), "UTF-8");
c1=new String(a.getBytes("ISO-8859-1"),"GB2312");
c2 = new String(b.getBytes("UTF-8"), "GB2312");
System.out.println(c1.equals(c2));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
这个程序输出true
说明c2就是你想要的结果,你自己试试看,满意就加分
java文件读取内容转码
读取的文件流如果是read(读取字节流的时候,中文就会是乱码)方法,所以现在全都是听过readline方式进行的读取。举例:
可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
System.out.println(str);//原样输出读到的内容
};
bre.close(),//关闭流,否则bre流会一直存在,直到程序运行结束。
除此之外,java文件读取的时候有中文就很出现乱码,通常获取到的文件中通常都是“iso8859-1”格式,需要转换为“UTF-8”格式。
如:String str = new String(str.getByte("iso8859-1"),"UTF-8");进行下强制转换后在进行读取即可。
备注:通常格式有GBK、UTf-8、iso8859-1、GB2312,如果上面的强制转换不成功,依次进行这些格式的尝试,肯定是可以解决问题的。
关于JAVA中中文字符的转码问题?
IO包 , 转换流;InputStreamReader OutStreamWriter;
FilleReader //默认只会读 GBK 码表; //它爹会读 UTF -8;
通过转换流可以转换它们去找的码表:具体操作看转换流的构造方法,传入格式那个!
给你个格式:
OutputStreamWriter osw =new OutputStreamWriter( new FileOutputStream("d.txt","UTF-8") );
关于转码学java和转码学什么好的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-23,除非注明,否则均为
原创文章,转载请注明出处。