簡體   English   中英

獲取“java.nio.charset.UnmappableCharacterException:輸入長度= 1”

[英]Getting “java.nio.charset.UnmappableCharacterException: Input length = 1”

我在collect()方法調用(或toList()調用)上獲得UnmappableCharacterException:

    private static void handleTransaction(Path a_filePath, String a_sTrasactionName, String a_sTransactionFilePath) {

    // read file into stream, try-with-resources
    try (Stream<String> stream = Files.lines(Paths.get(a_filePath.toString()), Charset.defaultCharset())) {

        List<String> list =
            stream.filter(line -> (line.indexOf(a_sTrasactionName) > 0))
            .collect(Collectors.toList());

        list.forEach(line -> {

            System.out.println(line);

            try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(_FILES_PATH + a_sTransactionFilePath),Charset.defaultCharset(), StandardOpenOption.APPEND)) {
                writer.write(line + "\n");
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
    } catch (IOException e1) {

        e1.printStackTrace();
    }

它對我有用,但從那時起從未如此。

我讀的文件是在solaris上創建的csv文件。 我在Windows 2012服務器上運行jar

你能告訴我嗎?

謝謝。

我讀的文件是在solaris上創建的csv文件。 我在Windows 2012服務器上運行jar

那么這可能是問題所在。 您正在使用platform-default編碼來讀取和寫入文件。 如果文件是在Solaris上創建的,那么很可能對Windows框具有不同的平台默認編碼。

如果您知道正在閱讀的文件的編碼,請指定該編碼。

如果你控制你正在閱讀和寫作的文件的編碼,我強烈建議使用UTF-8,除非你有充分的理由不這樣做。

如果您正在閱讀一個您知道使用平台默認編碼的文件,或者您正在編寫一個您肯定想要使用平台默認編碼的文件,請使用Charset.default() - 並盡量避免使用后者。

(基本上,一切都以UTF-8編碼的世界是一個更簡單的世界...)

老實說,我甚至不確定這是否是答案,但我想提供幫助。 我有同樣的問題並使用:

val source = io.Source.fromFile("C:/mon_usatotaldat.csv").codec.decodingReplaceWith("UTF-8")

我得到了輸出:

來源:scala.io.Codec = windows-1252

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM