1. 程式人生 > >java 亂碼問題-Dfile.encoding=UTF-8

java 亂碼問題-Dfile.encoding=UTF-8

windows環境編碼GBK、Linux環境下沒有出現異常時預設編碼是utf8、異常時雖然 系統環境顯示utf-8,但是因為安裝了一些涉及系統環境的包之後,對編碼為utf-8有些 許懷疑
程式中轉換的最終編碼utf-8
懷疑物件是程式執行環境的預設編碼問題
在使用java自帶工具Java virtualVM分析程式記憶體、執行緒使用情況時,意外發現JVM arguments一項中的引數對在Eclipse和myeclipse下執行程式有所不同:Eclipse裡面得引數只有-Xmx1024m而myeclipse下的程式則多出一項:-Dfile.encoding=UTF-8
在啟動程式時多加上-Dfile.encoding=UTF-8引數,程式Eclipse中亂碼消失,Linux下定時任務執行的程式也沒有亂碼了

-Dfile.encoding解釋:
在命令列中輸入java,在給出的提示中會出現-D的說明:
-D=  set a system property
-D後面需要跟一個鍵值對,作用是設定一項系統屬性
對-Dfile.encoding=UTF-8來說就是設定系統屬性file.encoding為UTF-8
那麼file.encoding什麼意思?字面意思為檔案編碼。
搜尋java原始碼,只能找到4個檔案中包含file.encoding的檔案,也就是說只有四個檔案呼叫了file.encoding這個屬性。
在java.nio.charset包中的Charset.java中。這段話的意思說的很明確了,簡單說就是預設字符集是在java虛擬機器啟動時決定的,依賴於java虛擬機器所在的作業系統的區域以及字符集。
程式碼中可以看到,預設字符集就是從file.encoding這個屬性中獲取的。個人感覺這個是最重要的一個因素。下面的三個可以看看。
/**
     * Returns the default charset of this Java virtual machine.
     *
     *

The default charset is determined during virtual-machine startup and
     * typically depends upon the locale and charset of the underlying
     * operating system.
     *
     * @return A charset object for the default charset
     *
     * @since 1.5
     */
    public static Charset defaultCharset() {
        if (defaultCharset == null) {
     synchronized (Charset.class) {
   java.security.PrivilegedAction pa =
      new GetPropertyAction("file.encoding");
   String csn = (String)AccessController.doPrivileged(pa);
   Charset cs = lookup(csn);
   if (cs != null)
      defaultCharset = cs;
                else 
      defaultCharset = forName("UTF-8");
            }
}
return defaultCharset;
}

在java.net包中的URLEncoder.java中的static塊裡面:
dfltEncName = (String)AccessController.doPrivileged (
      new GetPropertyAction("file.encoding")
     );
在javax.print包中的DocFlavor.java
static {
   hostEncoding = 
      (String)java.security.AccessController.doPrivileged(
                   new sun.security.action.GetPropertyAction("file.encoding"));
     }
在com.sun.org.apache.xml.internal.serializer包中的Encodings
// Get the default system character encoding. This may be
                 // incorrect if they passed in a writer, but right now there
                 // seems to be no way to get the encoding from a writer.
                 encoding = System.getProperty("file.encoding", "UTF8");

相關推薦

java 亂碼問題-Dfile.encoding=UTF-8

windows環境編碼GBK、Linux環境下沒有出現異常時預設編碼是utf8、異常時雖然 系統環境顯示utf-8,但是因為安裝了一些涉及系統環境的包之後,對編碼為utf-8有些 許懷疑程式中轉換的最終編碼utf-8懷疑物件是程式執行環境的預設編碼問題在使用java自帶工具J

eclipse 預設UTF-8 -Dfile.encoding=UTF-8

問題描述: 程式涉及到國際化問題,httpclient抓回來的資料亂七八糟的亂碼,在轉了幾次編碼之後在Myeclipse下可以獲取正常編碼的原始碼(準確的說是能顯示一大部分,少部分內容依然亂碼),但是將程式移植到eclipse下先前的程式就出現了亂碼(移植工作曾經嘗試過以

-Dfile.encoding=UTF-8

·JDK1.3 沒有 XML 解析器,所有要自己配上 xercesImpl.jar 和 xml-apis.jar ·JDK 1.4.0 和 JDK 1.4.1 雖然具有了 XML 解析器,但是有些 Bug,所有還是得把 xercesImpl.jar 放到 Tomcat/com

Maven install [WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources

all div pro 警告 enc resource encoding sin 配置 一、背景   maven項目install過程中,出現:[WARNING] Using platform encoding (UTF-8 actually) to copy filter

springcloud採坑--Zuul上傳檔案報java.nio.charset.IllegalCharsetNameException: UTF-8;boundary=sqgzzmMxl1UPdIp0IAYnQgUIAr9yNewVAzKIX

報錯日誌: 2018-12-17 10:01:19,688 ERROR [io.undertow.request] (default task-3) UT005023: Exception handling request to /xxx/app/bannerMaterialManager/uploadBa

springcloud采坑--Zuul上傳文件報java.nio.charset.IllegalCharsetNameException: UTF-8;boundary=sqgzzmMxl1UPdIp0IAYnQgUIAr9yNewVAzKIX

servlet ctu ets ica efault mmx default session pat 報錯日誌: 2018-12-17 10:01:19,688 ERROR [io.undertow.request] (default task-3) UT005023: E

Python 檔案操作中的讀寫模式:open(path, '-模式-',encoding='UTF-8')

open(path, ‘-模式-‘,encoding=’UTF-8’) 即open(路徑+檔名, 讀寫模式, 編碼) 在python對檔案進行讀寫操作的時候,常常涉及到“讀寫模式”,整理了一下常見的幾種模式,如下: 讀寫模式: r :只讀 r+ :

又見中文亂碼 -Dfile.encoding=GBK

在setDomianEnv.sh中新增環境變數-Dfile.encoding=GBK    問題解決。 其原因在於String.getBytes()時實際呼叫StringCoding.encode(value, offset, count)方法,其中使用預設編碼Charset

eclipse:將編碼為GBK的Java原始檔批量轉為UTF-8

本人新手,有個java工程開始編碼預設設定為GBK,後來出現編碼問題後準備改為UTF-8編碼,發現出現中文亂碼,在網上找到一篇博文可以批量有GBK轉化為UTF-8可以解決此問題,原網址:http://my.oschina.net/binny/blog/62959。再次感謝!

Java FileWriter無法編碼utf-8 轉換方法

原本想通過檔案追加的方式,向.txt或者.json檔案(其他也類似)結尾新增新的文字,開始通過FileWriter追加,但是中文追加後卻成了亂碼。 查了一圈下來結論是:Java FileWriter

java將GBK轉為utf-8

/** * 將一個GBK編碼的txt文件轉化為UTF-8的XML檔案 * @author SUNBIN * */ public class ConvertXML { public static void main(String[] args) { getXML

java 新建格式為utf-8 的檔案

使用java 程式建立格式為utf-8檔案的方法:   try{             File file=new   File("C:/11.jsp");              OutputStream out=new FileOutputStream(file

Java中讀寫UTF-8編碼檔案

 在C#中,採用System.IO.StreamReader和System.IO.StreamWriter直接讀寫UTF-8編碼的檔案,因為在這兩個類可以指定讀取或者寫入檔案的編碼格式,而其預設編碼則是UTF-8。 而在Java中,如果我們用java.io.FileReade

讀取文字出現 鍩 * 系列亂碼錯誤(UTF-8 BOM問題)的原因及解決方法

現象 讀取文字時經常會出現鍩*系列錯誤。 例1:鍩縣,其實開頭的文字是h,http被顯示為鍩縣ttp 例2:鍩縫,其實開頭的文字是p,public被顯示為鍩縫ulic 只要文字的首字母為鍩的都屬於這類錯誤,在Python、Java、PHP等等使用過程中都

Java檔案讀寫—utf-8格式

 Windows預設檔案格式為UTF8格式,之前我們做過一個檔案讀寫,但寫入檔案的方式是二進位制格式,接下來,我們以windows預設的utf-8格式讀寫檔案。 IOStream類 package c

py檔案增加encoding='utf-8',errors='ignore' 後仍然沒解決UnicodeDecodeError: 'gbk' codec can't decode byte

感覺和oracle的輸出字符集有關,gbk,gb18030都試了沒解決,注意紅色部分,修改後解決問題 #!/usr/bin/env python import sys import csv import cx_Oracle import codecs import os

Java字串編碼轉換UTF-8

import java.io.UnsupportedEncodingException; /** * * * 描述:<p>    功能描述,該部分必須以中文句號結尾。</p> * 建立日期:2012-7-16 下午4:28:16<

JAVA GBK 字串轉為utf-8

String str = "µâº£´¼×¢ÉäÒ"; byte[] fullByte1 = new String(str.getBytes("ISO-8859-1"), "GBK") .getBytes("UTF-8"); String fullStr

Jenkins maven 構建亂碼,修改file.encoding系統變量編碼為UTF-8

out selenium 可能 odi 沒有 linu 分享 log image 一切都是windows的控制臺默認編碼GBK問題 情景: 使用jenkins構建,console 輸出的中文亂碼。代碼編碼格式是utf-8,因為Jenkins會默認讀取當前系統的編碼格式,導致

java(IO)讀寫文件亂碼轉換UTF-8問題

buffered 寫入文件 寫入 trace trac catch 錄取 ktr pri java(IO)讀寫文件亂碼轉換UTF-8問題 讀取文件 String?Content?=?"";?//?文件很長的話建議使用StringBuffer