5

我正在尝试使用 java 从保存在 utf-8 中的文本文件中读取 Unicode 字符,我的文本文件如下

अ,अदेब,अन,अनसुलि,अनसुलि,अनज,अनज,अनद गन,थन,हम,हम,जम,गल,गथ,द,द,थनै,थनै,थनै,थथ,सथ,खफ,खफ,गल,गथ,मिख,मिख,जथ,जथ,थ बिथ, बिख, बेल, मम, आ, आइ, आउ, आगदा, आगसिर</p>

我已经尝试使用以下代码

import java.io.*;
import java.util.*;
import java.lang.*;
public class UcharRead
{
    public static void main(String args[])
    {
        try
        {
            String str;
            BufferedReader bufReader = new BufferedReader( new InputStreamReader(new FileInputStream("research_words.txt"), "UTF-8"));
            while((str=bufReader.readLine())!=null)
            {
                System.out.println(str);
            }
        }
        catch(Exception e)
        {
        }
    }
}

出去放了???????????????????????? 谁能帮我

4

3 回答 3

9

您(很可能)正确阅读了文本,但是当您将其写出时,您还需要启用 UTF-8。否则,无法以默认编码打印的每个字符都将变成问号。

尝试将其写入 File 而不是 System.out (并指定正确的编码):

Writer w = new OutputStreamWriter(
   new FileOutputStream("x.txt"), "UTF-8");
于 2013-09-11T05:54:43.487 回答
6

如果您使用 UTF-8 编码正确阅读文本,请确保您的控制台也支持 UTF-8。如果您使用的是 eclipse,那么您可以通过以下方式为您的控制台启用 UTF-8 编码:

Run Configuration->Common -> Encoding -> Select UTF 8

这是日食截图。

在此处输入图像描述

于 2013-09-11T05:57:34.087 回答
5

您没看错——问题几乎可以肯定只是您的控制台无法处理文本。验证这一点的最简单方法是打印出char字符串中的每一个。例如:

public static void dumpString(String text) {
    for (int i = 0; i < text.length(); i++) {
        char c = text.charAt(i);
        System.out.printf("%c - %04x\n", c, (int) c);
    }
}

然后,您可以使用Unicode 代码表验证每个字符是否正确。

一旦您确认您正在正确读取文件,您就可以处理事物的输出端 - 但尝试一次专注于它的一侧很重要。尝试同时诊断输入输出编码中的潜在故障非常困难。

于 2013-09-11T05:54:27.100 回答