| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2860 人关注过本帖, 1 人收藏
标题:输出文件内容,汉字乱码
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
ansi編碼的漢字符,必須對文本從頭到尾順序掃描,一個錯位,後面全成亂碼,這就是我們常見的亂碼成因。這種編碼是舊系統的經典用法,并不好用,在那個時代過來的人都知道那很麻煩,不然編程語言也不至於發展到以多字節爲單元的字符編碼。ansi和utf8一樣是可變長度編碼,弊端是一樣的。在Windows系統中,是utf-16編碼,即固定長度的2字節編碼,好處理得多;另外還有更全面的utf-32編碼,即4字節的。

授人以渔,不授人以鱼。
2015-02-12 21:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
在GBK編碼的系統中(當前的中文Windows系統就是這種編碼),其内碼範圍是0x8140~0xfefe,第二字節未必是大於0x80,再用以前GB2312那種靠高位是1的方法來判斷,是不行的。在樓主的問題中,數據流是倒過來掃描,先讀到第二字節,這個時候不能僅看該自己的高位是否爲1來判斷,還需要預讀下一個字節才成。哪有這麽簡單!與其把算法弄複雜,其實如前有人所言,乾脆把整個文本順序讀入(讀入的同時就把數據變成utf-16編碼的)了再倒置還來得方便。

授人以渔,不授人以鱼。
2015-02-12 21:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
在.net基礎類庫中,有現成的編碼轉換庫函數,能把各種編碼互相轉換,這是從Windows7開始就力推的系統API,在Windows10後的大一統Windows下全是這種API,不再是Win32 API了。Win32 API雖然也有轉換函數,但很複雜,我也不能完全弄懂。當然,如果你假定GB2312就夠了,那麽也可以繼續沿用舊的方法,但那樣沒太大意義了。何況,這種倒置的需求,沒什麽實際的作用,花心思做它,似乎劃不來。

授人以渔,不授人以鱼。
2015-02-12 21:22
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:2 
回复 23楼 TonyDeng
vb里都是unicode,占两个字节,asc西文字符前面加个为0的字节,这样应该怎么处理都不会出现半个汉字的问题的。不过好像txt文件里的汉字永远是用汉字内码表示的,两个字节的最高位均为1。
2015-02-12 22:24
zxk112
Rank: 2
等 级:论坛游民
帖 子:11
专家分:26
注 册:2015-2-13
收藏
得分:2 
汉字好像要两个两个的倒
2015-02-14 12:04
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用xzlxzlxzl在2015-2-12 22:24:50的发言:

vb里都是unicode,占两个字节,asc西文字符前面加个为0的字节,这样应该怎么处理都不会出现半个汉字的问题的。不过好像txt文件里的汉字永远是用汉字内码表示的,两个字节的最高位均为1。

所有文件都是以字節爲單位儲存的,問題是程序怎麽解釋其意義而已。這正如int和char,我們把int視爲4個char,或把它視爲一個32位整數,或把它視爲2個16位整數,都是自由的。解釋不通,呈現的結果就不同,也就是所謂的“亂碼”,亂碼衹是沒按你預想的方案解釋罷了。

授人以渔,不授人以鱼。
2015-02-14 12:09
快速回复:输出文件内容,汉字乱码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025902 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved