延伸判斷字串內是否有中文字的話題,有人問到了是否可以判斷亂碼的存在?
我知道亂碼的產生原因有兩種
1. 不知道原有的編碼,而以非原編碼來檢視文件。
例如由判斷字串內是否有中文字例中產生的 all.txt文件 (unicode編碼),以ultraedit 打開來檢視 (會以 ANSI 編碼 打開),就會看到不一樣的文字。
由於這些文字顯示時並非預期的樣子,常常看不懂,俗稱亂碼。
這個文件並非亂碼,只是用錯了編碼來檢視文件。因此只要找到了正確的編碼來檢視即可。
2. 資料儲存體 (storage) 無法支援編碼。例如 sql datatype varchar(50) 存入了王建煊,因為煊存入後會遺失資料,導致讀出時,煊變成了?。
?或方格等,是指無法顯示的字,因此也是亂碼常見的癥狀。
舉例來說,all2.txt 是 all.txt 以 ANSI 編碼另存來的。在儲存時會出現下面的警告。
強迫儲存後,分別找到 29002 的地方,就會發現 ANSI 的字變成了?
再以 UltraEdit 來比較,發現兩邊儲存時的不同。「煊」在unicode 存儲成 4A71,而在 ANSI 只存了 3F。
由於亂碼的形成原因不一,因此也難以判斷進而偵測亂碼的存在。
沒有留言:
張貼留言