【问题标题】:How to read UTF-8 characters from the file as bytes?如何从文件中读取 UTF-8 字符作为字节?
【发布时间】:2011-10-23 04:00:01
【问题描述】:

我无法从文件中读取 UTF-8 字符作为字节。 UTF-8 字符在从字节转换为字符时显示为 questionmarak(?)。

下面的代码 sn -p 显示文件读取。

请告诉我如何从文件中读取 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. )

【问题讨论】:

    标签: java file-upload


    【解决方案1】:

    这就是问题所在:

    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");
    

    【讨论】:

    • 演员不会将 char 实际转换为 UTF-16 代码单元吗?
    • @Vineet:不,char UTF-16 代码单元。它只是通过获取该字节的值并将其解释为 UTF-16 代码单元来转换 from 一个字节......这基本上就是 ISO-8859-1 所做的。它将字节 0-255 映射到 U+0000 到 U+00FF。
    • 好吧,你说得对;我对 StringBuffer 和字节数组感到困惑。
    猜你喜欢
    • 2015-07-26
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多