我用的系统不是中文的,而且可能要遇到多种语言。
Java应该是支持UniCode的吧,可是,我用Java读取一个文件中的内容,只有英文可以正常显示。我用命令行试过,用Eclipse也试过,都不行。对于Eclipse支持中文的问题,我在网上找了下,改Edit->SetCoding或者Window->Preferences->General->Content Types下的text树形结构中的一些编码都不行。就是直接用System.out.println();打印不是英文的字符都可能出现“?”。请大家帮帮忙,谢谢。

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【lvzhu18】截止到2008-07-11 11:24:53的历史汇总数据(不包括此帖):
    发帖的总数量:19                       发帖的总分数:1040                     每贴平均分数:54                       
    回帖的总数量:157                      得分贴总数量:51                       回帖的得分率:32%                      
    结贴的总数量:18                       结贴的总分数:940                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:1                        未结的总分数:100                      
    结贴的百分比:94.74 %               结分的百分比:90.38 %                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    值得尊敬
      

  2.   


    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStreamReader;public class Test {    public static void main(String[] args) {
         BufferedReader in = null;
         try {
         in = new BufferedReader(new InputStreamReader(new FileInputStream("E:\\b.txt"), "UTF-8"));
         System.out.println(in.readLine().getBytes("UTF-8"));
         in.close();
         }
         catch (FileNotFoundException fnfe) {
         fnfe.printStackTrace();
         }
         catch (IOException ioe) {
         ioe.printStackTrace();
         }
        }
    }
    注:b.txt文件中有中文也有英文等等,不加“.getBytes("UTF-8"));”用命令行能显示英文,用Eclipse全是乱码;加上就全是乱码。
    这是我的测试程序,我主要是要用在Servlet中。
    而且我在Servlet中已经加上了response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html; charset=UTF-8");
    response.setLocale(new java.util.Locale("zh", "CN"));还是不行。
    请帮帮忙,谢谢!
      

  3.   


    请问应该在哪里改?是程序,还是IDE的设置?谢谢!
      

  4.   

    1 你在cmd里面运行看看
    2 eclipse的控制台有编码设置的。
      

  5.   


    请问应该在哪里改?是程序,还是IDE的设置?谢谢!
      

  6.   


    请问应该在哪里改?是程序,还是IDE的设置?谢谢!
      

  7.   

    在cmd里面,不加“.getBytes("UTF-8"));”能显示英文,其他是乱码,加上就全是乱码。
      

  8.   

    你的b.txt的字符集是utf-8吗?如果不是改成utf-8试试
      

  9.   

    Windows操作系统,里面的txt文件,一般编码都不是UTF-8的,可能是GBK,或者ASCII的.
    txt文件本身是GBK编码的中文,你用UTF-8的编码方式去读,读出的肯定是:中文是乱码,英文能显示.因为UTF-8和GBK,在英文字符的处理上都使用的是ASCII编码.
    我想,楼主把5楼的关键代码这样写,应该可以显示汉字的.
    in = new BufferedReader(new InputStreamReader(new FileInputStream("E:\\b.txt"), "GBK"));
                System.out.println(in.readLine());Servlet的编码问题,那就比较复杂了.
      

  10.   


    window->preferences->general->Appearance->color and fonts
    主要设置:Basic和含有“console”的内容的文字字体另外中文编码常见的除了utf-8,还有GB18030,可以试一下。还有一个验证是不是正确读出来的办法是:读出文本文件字体,再给写回文件里去。但不要用PrintWriter。
      

  11.   

    to:amethystic
      我把文件改成了UTF-8的也不行,以前是UniCode的。to:preferme
      我试了下,改成“GBK”也不行,但改成“UniCode”,并且读“UniCode”的文件,能显示日文和大部分中文,但还有一部分显示不了。
    但这只是读文件,在Servlet中还是一点效果都没有。
      

  12.   

    改成utf-8,然后System.out.println(in.readLine());不行吗?
      

  13.   

    文字编码是什么类型的,用什么类型读这个文件,就能显示大部分中文(不过要IDE支持才行),但还是有“?”,就和直接用记事本打开的效果一样,而将txt文件用浏览器打开就可以完全显示。请问我用Java能做到吗,用Servlet能做到吗?谢谢。
      

  14.   

    我用Servlet试了试,从文件中读出来的数据(按文件的文字类型读),在控制台与在记事本中显示是一样的,但用Servlet启动浏览器,显示的是正确的。
    我想再问下,就是Servlet用“request.getParameter("str");"得到的数据的编码是由什么决定的,还是就固定是某种编码?
    谢谢!
      

  15.   

    你看看你的server的字符集是什么?也许不是utf-8呢
      

  16.   

    我试着用“ISO-8859-1”来读时,能得到一部分中文,和在记事本里面显示的一样,但一转成“UTF-8”时,就成乱码了。
    我是用:String str = new String(str.getBytes("ISO-8859-1"), "UTF-8");
    来进行转换的,不知道是否正确。谢谢!
      

  17.   

    用的系统不是中文的,就像你在英文的linux下一样,缺乏中文库,
      

  18.   


    谢谢!请问,那为什么在Excel没有中文字体就能够显示完整的字符串呢?
      

  19.   

    应该是Excel已经集成了一些中文字符编码
      

  20.   


    微软 Office 中很多字体 Java 用不了。
      

  21.   

    这个应该不是Eclipse的问题吧?java内核是unicode的,就连class文件也是,但是很多媒体,包括文件/流的保存方式是使用字节流的。因此java要对这些字节流经行转化。char是unicode的,而byte是字节。java中byte/char互转的函数在sun.io的包中间有。其中ByteToCharConverter类是中调度,可以用来告诉你,你用的convertor。其中两个很常用的静态函数是
    public static ByteToCharConverter getDefault(); 
    public static ByteToCharConverter getConverter(String encoding); 如果你不指定converter,则系统会自动使用当前的encoding,gb平台上用gbk,en平台上用8859_1。 
    byte ——〉char: 
    "你"的gb码是:0xc4e3 ,unicode是0x4f60