g++默认字符集utf-8_Java可能使用UTF-8作为其默认字符集
g++默認字符集utf-8
由于基于Java的應用程序通常用于各種各樣的操作系統和環境中,因此Java開發人員會遇到與基于字符的輸入和輸出有關的問題并不少見。 涉及這些問題的博客文章包括《警察的恐怖:默認語言環境,默認字符集和默認時區》 ; 注釋JDK默認數據 ; 編碼問題:適用于linux和Java應用程序的解決方案 ; 愚蠢的Java字符串 ; Java:字符編碼的粗略指南 ; 這個帖子標題太長了,不能在這里列出 。
多年來,對Java進行了一些增強,以減少這些問題,但是當隱式使用默認字符集時,有時仍然存在一些問題。 《 Java Puzzlers 》一書的一個難題(難題18)描述了與Java中“默認字符集的變量”有關的古怪之處。
由于所有這些與Java的默認字符集有關的問題,歡迎 JEP 草案 “ 使用UTF-8作為默認字符集 ”( JDK-8187041 )出現。 除了潛在地解決與默認字符集有關的問題外,該JEP還提供了有關這些問題是什么的很好的概述以及解決這些問題的替代方案。 JEP的“動機”部分目前總結了該JEP為何重要的原因:“使用默認字符集的API對Java平臺的新開發人員來說是一種危害”,“對于經驗豐富的開發人員來說,也是一個麻煩?!?
“默認”字符集的問題由于使用不同的字符集以及JDK API中當前可用的不同方法(導致多個“默認”)而變得更加復雜。 這是要考慮的問題的細分。
-  描述文件內容字符集的“默認”字符集可能與描述文件路徑字符集的“默認”字符集不同。 
- Java系統屬性file.encoding指定文件內容的默認字符集,其設置是java.nio.charsets.Charset.defaultCharset()返回的值。
 
 -  與用于讀取/寫入文件內容的字符集有關的“默認”有兩種類型。 
- 某些JDK方法不允許指定字符集,并且始終僅針對該特定方法且不考慮任何語言環境或系統配置,都采用UTF-8的“默認”字符集。
 
 
JEP 草案 “ 使用UTF-8作為默認字符集 ”將有助于解決與默認用于讀取和寫入文件內容的字符集有關的不同類型“默認”的問題。 例如,它將消除使用平臺默認方法寫入文件并從始終使用UTF-8的方法讀取文件(無論平臺默認字符集如何)時可能引起的潛在沖突。 當然,如果平臺默認值不是NOT UTF-8,那么這只是在特定情況下的問題。
以下Java代碼是一個簡單的類,可打印出一些與字符集相關的設置。
顯示默認字符集詳細信息
package dustin.examples.charset;import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.Charset; import java.util.Locale;import static java.lang.System.out;/*** Demonstrate default Charset-related details.*/ public class CharsetDemo {/*** Supplies the default encoding without using Charset.defaultCharset()* and without accessing System.getProperty("file.encoding").** @return Default encoding (default charset).*/public static String getEncoding(){final byte [] bytes = {'D'};final InputStream inputStream = new ByteArrayInputStream(bytes);final InputStreamReader reader = new InputStreamReader(inputStream);final String encoding = reader.getEncoding();return encoding;}public static void main(final String[] arguments){out.println("Default Locale: " + Locale.getDefault());out.println("Default Charset: " + Charset.defaultCharset());out.println("file.encoding; " + System.getProperty("file.encoding"));out.println("sun.jnu.encoding: " + System.getProperty("sun.jnu.encoding"));out.println("Default Encoding: " + getEncoding());} }下一個屏幕快照顯示了在基于Windows 10的筆記本電腦上運行此簡單類的結果,而未明確指定任何與字符集相關的系統屬性,僅指定了file.encoding系統屬性,并指定了兩個系統屬性file.encoding和sun.jnu.encoding 。
剛剛顯示的圖像演示了通過屬性控制默認字符集的能力。 它還說明,對于具有en_US 區域設置的Windows環境,文件內容和文件路徑的默認字符集均為Windows-1252 ( Cp1252 )。 如果實現了本文中討論的JEP草案 ,則即使對于Windows,文件內容的默認字符集也將更改為UTF-8。
當默認字符集更改為UTF-8時,在某些應用程序中可能會造成重大破壞。 JEP草案討論了減輕此風險的方法,其中包括通過預先將系統屬性file.encoding預先設置為UTF-8來早期測試應用程序對更改的敏感性。 對于需要保留當前行為的情況(使用系統確定的默認字符集而不是始終使用UTF-8),JEP草案的當前版本建議支持指定-Dfile.encoding=SYSTEM 。
JEP當前處于草稿中,并且與任何特定的JDK版本都不相關。 但是,根據JDK郵件列表上的最新帖子 ,我很樂觀地認為,在不久的將來,我們會將UTF-8視為JDK未來版本中的默認字符集。
翻譯自: https://www.javacodegeeks.com/2018/02/java-may-use-utf-8-default-charset.html
g++默認字符集utf-8
總結
以上是生活随笔為你收集整理的g++默认字符集utf-8_Java可能使用UTF-8作为其默认字符集的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 过滤器过滤特定的url_如何从过滤器中排
 - 下一篇: varlinux(var linux)