將字符串向hdfs中寫入,出現中文亂碼!


jsonObject.toString():需要處理的json對象轉成的字符串
"/testData/ExtractKWByOnce.txt":寫入hdfs中的目標路徑
try {
            Configuration configuration=new Configuration();
            InputStream inputStream=new BufferedInputStream(
                    new ByteArrayInputStream(jsonObject.toString().getBytes("")) );//打開一個BufferedInputStream字節輸入流

            FileSystem fs=FileSystem.get(URI.create("hdfs://localtion:8020"),configuration);
//這里是creat()方法表示新創建一個文件,如果想在一個文件上追加,請用append()方法。 FSDataOutputStream fsDataOutputStream=fs.create(new Path("/testData/ExtractKWByOnce.txt")); IOUtils.copyBytes(inputStream,fsDataOutputStream,1024,true); fsDataOutputStream.close(); fs.close(); inputStream.close(); } catch (IOException e) { e.printStackTrace(); }

用此方法可能會出現 中文亂碼問題,hdfs上的文件和自己期待存入的內容有差異。

可以在 jsonObject.toString().getBytes("") 處將我們的編碼格式指定為:

jsonObject.toString().getBytes("GBK")

 

基本可以解決問題

----------------------------------------------------------------------------------------------------------------------------

今日發現,在GBK編碼下,從瀏覽器直接打開hdfs文件不會出現亂碼,但是在shell終端通過#>hdfs dfs -cat xxx 命令打開的hdfs文件出現了亂碼問題。

將編碼改回UTF-8,從瀏覽器直接打開hdfs文件會出現亂碼,但是在shell終端通過#>hdfs dfs -cat xxx 命令打開的hdfs文件不出現亂碼。

所以具體選擇哪種編碼,要看實際需求。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM