【问题标题】:How to encode string from readline() in UTF-8如何在 UTF-8 中对 readline() 中的字符串进行编码
【发布时间】:2015-03-28 04:17:02
【问题描述】:

我正在寻找一种可行的解决方案,以 UTF-8 对字符串进行编码。

我是 Android 新手,请耐心等待。 ;)

我尝试了所有我能找到的解决方案,但没有任何效果!

这是我的代码:

public void Loader(String nameFile) throws FileNotFoundException {

    File file = new File(nameFile);
    FileInputStream f_is = new FileInputStream(file);
    BufferedInputStream b_is = new BufferedInputStream(f_is);
    BufferedReader data = new BufferedReader(new InputStreamReader(b_is));

    try {
        while ( (BufferTemp=data.readLine()) != null) {

            if (BufferTemp.contains("****")) {
                Titolo = data.readLine();
                Tempo = data.readLine();
                Persone = data.readLine();
                Piatto = data.readLine();
                Ingredienti = data.readLine();
                Altro = data.readLine();
                Descrizione = data.readLine();          
                EncodedBkg = data.readLine();
            }       
        }
    } catch (IOException e) {
        e.printStackTrace();
    }           
}

如何将Descrizione 编码为 UTF-8 字符串??

我接受任何解决方案,欢迎对我的代码进行所有更改,但我需要逐行阅读文件。

【问题讨论】:

    标签: android string encoding utf-8


    【解决方案1】:

    Java 在内存中的原生String 编码是UTF-16。 readLine() 返回一个 UTF-16 编码的 String。 UTF-8 编码的String 是没有意义的。

    真正的问题是源文件是 UTF-8 编码的,而您无法从中读取非 ASCII 字符吗?如果是这样,请使用InputStreamReader 构造函数的字符集参数:

    new InputStreamReader(b_is, "utf-8")
    

    或者,您真的需要将 UTF-16 编码的 String 转换为 UTF-8 编码的内存缓冲区吗?

    ByteBuffer Descrizione_utf8 = Charset.forName("utf-8").encode(Descrizione);
    

    【讨论】:

    • 我有一个 .txt 文件,当我尝试将其放入 textview 中时,像“è à ì ò ù”这样的字符变成“? ? ? ? ?”我尝试使用new InputStreamReader(b_is, "utf-8"); 但不起作用。现在我将尝试使用ByteBuffer Descrizione_utf8 = Charset.forName("utf-8").encode(Descrizione); 对字符串进行编码谢谢
    • 您不需要编码 String 只是为了在 TextView 中显示它。你在追逐错误的问题。您是否确认 readLine() 正在返回正确的开头字符?如果没有,您需要从那里开始。文件的实际编码是什么?是 UTF-8 还是 Ansi?
    • 它是各种.txt合并到一个文件中的组合(二进制模式),所以我认为是Ansi。
    • 我验证它是 Ansi 还是 UTF-8,并且是 Ansi,我保存文件时可能有问题。带来不便敬请谅解!它适用于新文件!
    【解决方案2】:

    java.net.URLEncoder.encode("Descrizione", "UTF-8");

    【讨论】:

    • 这会将字符串 URLEncode 为 utf8 编码,如果以不同的格式读取,则会出现乱码。 (例如 UTF16)
    【解决方案3】:

    您的输入流阅读器将默认使用您设备上设置的默认编码,(例如 shift JIS 或 UTF16,取决于您的区域设置)

    然后重置你的字符串调用的编码:

    Descrizione = Charset.forName("UTF-8").encode(data.readLine());
    

    现在您有了一个内部 utf8 表示的字符串,如果您希望将其格式化为需要将其发送到 Web 服务器,然后您可以调用:

    URLEncoder.encode (myString, "UTF-8");
    

    它将以这样的方式转义一些字符,以便它们可以作为参数通过 http GET 或 POST 发送。

    【讨论】:

    • Descrizione = Charset.forName("UTF-8").encode(data.readLine());ByteBuffer Descrizione_utf8 = Charset.forName("utf-8").encode(Descrizione); 有什么区别?在这种情况下,Descrizione 的返回类型是什么?
    猜你喜欢
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2015-05-28
    • 2018-08-01
    • 2011-02-27
    • 1970-01-01
    • 2013-01-31
    相关资源
    最近更新 更多