日期:2014-05-18  浏览次数:20584 次

关于编码的问题。实在让我头疼。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
        <student>
<idexam>20130415</idexam>
<idcard>210923195401138219</idcard>
<name>刘德华</name>
<location>江南</location>
<grade>45.0</grade>
        </student>


这段是XML。是我通过eclipse,在控制台输入后,读取控制台的输入,然后将数据写入的该xml文件。
读取通过的是如下代码,
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try
{
String str = br.readLine();


写入代码如下:
TransformerFactory tfactory = TransformerFactory.newInstance();
Transformer tf = tfactory.newTransformer();
tf.transform(new DOMSource(document), new StreamResult(new
FileOutputStream("src/student.xml")));


在中间,我一直都没进行任何的编码操作。当然,不知道编译器会不会有什么自己的改动。

但是问题就是出现这里,这个数据,我可以通过打开xml文件查看,但是一旦通过代码读取,则会提示错误。
从第一个<student   的s位置开始出现错误。
(上面的定义xml版本,编码 那一行,是我自己先写好了的)
提示错误的字符。

我用的系统是win7,在Eclipse下,一般默认的编码是GBK。
可不可以从一开始就将所有文字输入的编码按照自己的编码写入呢。
想不明白的几个问题:

1,eclipse界面写入的时候,这些汉字,英文,数字,采用的是什么编码呢?
2,当将该编码写入到内存中,是否就是按照系统默认的编码(或者Eclipse默认的编码)进行的操作
3,一般Eclipse编码和操作系统默认编码是一致的么,这个可以自己设置么?
4,如果自己写一段代码,在自己电脑(GBK默认编码)上能够运行,结果有人电脑上编码为UTF-8,是不是就可能出现问题。
   貌似程序控制的,都是从内存中读取数据的时候,能够指定特定编码。
   而没有对输入的内容,进行编码指定,让他以特定的编码进入内存。

------解决方案--------------------
1.Eclipse中对于不同的文件类型可以设置不同的编码格式,你说的那些应该是java文件吧。都是你自己设置的。
2.存入内存的只是字节流,不同的编码格式字节流长度不一样,UTF-8就是2个字节长度对应一个字符吧。读出来的肯定也是字节流,你需要以一定的规则来读取这个字节流,这个规则就是编码格式。
3.设置方法:General->Workspace->Text File encoding
4.你的代码是UTF-8写入的,直接把java文件拷到别人电脑(默认GBK读取的)上用,中文肯定乱码。可以把里面的内容拷贝出来复制过去,这样就不会出现问题。
5.至于万能解码器,我觉得word不错,自动识别各种编码

------解决方案--------------------
 System.out.println(Charset.defaultCharset());