Как прочитать символы UTF-8 из файла в байтах? - PullRequest
0 голосов
/ 09 августа 2011

Я не могу прочитать символы UTF-8 из файла как байты.символы UTF-8 отображаются как вопросник (?) при преобразовании в символы из байтов.

Ниже приведен фрагмент кода, показывающий чтение файла.

Скажите, пожалуйста, как мы можем читать символы UTF-8из файла.и плз, скажите, в чем проблема с процессом чтения байтового массива?

public static void getData {

    FormFile file = actionForm.getFile("UTF-8");

     byte[] mybt;
     try 
     {

                byte[] fileContents = file.getFileData();
        StringBuffer sb = new StringBuffer();
        for(int i=0;i<fileContents.length;i++){
            sb.append((char)fileContents[i]);
        }
        System.out.println(sb.toString());
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
   }

 Output ::??Docum??ents (input file content is : "ÞDocumÿents" , it contains some spanish characters. )

1 Ответ

3 голосов
/ 09 августа 2011

Это проблема:

for(int i=0;i<fileContents.length;i++){
    sb.append((char)fileContents[i]);
}

Вы конвертируете каждый байт в символ только путем его приведения. Это эффективно при использовании ISO-Latin-1.

Чтобы прочитать текст из InputStream, вы адаптируете его с помощью InputStreamReader, указывая кодировку символов.

Простейшим способом чтения всего файла в строку является использование Guava :

String text = Files.toString(file, Charsets.UTF_8);

Или преобразовать байтовый массив:

String text = new String(fileContents, "UTF-8");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...