非ASCII字符顯示
1. 問題背景
跟非ASCII字符顯示相關的問題遇到過兩次:
1.1 zip壓縮包中含有中文命名的文件,解壓后文件名顯示亂碼
1.2 C#-WinForm程序改造項目中,遇到一些德語顯示成亂碼中文的問題。由於德語比英語的26個字符多出4個字符(ä ö ü ß),即ASCII編碼中沒有這多出來的4個字符的編碼。
2. 解決方法
針對問題1.1,修改系統選項:Control Panel\Clock and Region-->Administrative-->Change system locale中改為Chinese(Simplified,China)

針對問題1.2,修改系統選項:Control Panel\Clock and Region-->Administrative-->Change system locale中改為German(Germany)。
3. 原因分析
從上圖中系統對system locale的解釋,它是當某程序不支持Unicode時,系統對特殊字符采用那種本地化解碼格式來顯示。
下面以Nodepad++顯示一個txt文件為例:
首先以UTF-8格式創建一個txt文本,並寫入一些非ASCII字符。

當把該txt文本的編碼格式改為ANSI(ASCII)后,如果system locale為Chinese(Simplified,China)時,顯示如下:

當把該txt文本的編碼格式改為ANSI(ASCII)后,如果system locale為German(Germany)時,顯示同UTF-8格式的顯示。
總結下,如果該txt文本的編碼是ASCII,但是其中又包含了一些非ASCII字符,系統就會按照system locale設置來顯示這些非ASCII字符。
那么,對於問題1.2就可以有另外一種解決方法:將C#程序中與顯示文字相關的.cs文件以UTF-8格式轉儲即可。
