delphi 如何判断编码格式,解决乱码问题
? ? ? ? ? 前陣子因為需要用到idhttp下載網頁,然而令人很生氣的是,他下載的html源碼是亂碼的,這樣子是沒有辦法使用的,所以就必須要把他進行編碼格式轉換,然而令人困擾的是,他是什么格式,又該怎么轉,轉成什么格式,這都是問題,轉成什么格式,自然是ansi ,可以正常人看的懂的才行了,該怎么轉,就必須先知道原先是什么格式了,,他是什么格式,這個就不好辦了
????????? 網頁格式,不外乎三種,utf8 ,gbk,gb2312,? 再細分的話,utf8 屬于雙字節,gbk,gb2312屬于單字節,他們的編碼方式分別為 unicode 和ansi ;也就是說,我們下載的網頁他們的編碼方式就是unicode 和ansi,那么目標明確了我們需要做的是,判斷網頁到底是哪種編碼,二選一,然而很遺憾的是,在網上并沒有找到有用的信息,而且也沒有找到能夠判斷字符是屬于那種編碼的函數,于是自己就想了個方法,寫了下面的語句:
function htmlDecode(html:string); beginhtml:=lowercase(html);if (not containtext('charset=',html) or containtext('=utf',html)) thenhtml:=utf8decode(html);result:=html; end;這個函數對于大多數網頁還是有效果的,然而卻存在兩個問題:
1、如果"charset=" 等號和charset 中間存在空格,那么就會出問題,
2、用這個方法解析出來的網頁,雖然是ansi的,而且也能看懂,然而,在有的標簽和中文間轉換會出錯,會把標簽的"<" 和中文的編碼,一起轉義成"?"號,破壞html文件。
????? 若果對于標簽不是很在乎的還是可以用,然而對于需要的卻是個災難性問題,后來在看一篇文章的時候,找到了另一種有效的方法;
方法二:
?????? 這種方法使用的是預編譯,如下:
function htmldecode(html:string):string; begin{$IFDEF UNICODE}result:=html;{$ELSE}result:=utf8decode(html);{$ENDIF} end;用這種方法后,第一種的出現的問題都沒了。
總結:第一種方法并不是沒用,二手沒有找到足夠的判斷條件
????
總結
以上是生活随笔為你收集整理的delphi 如何判断编码格式,解决乱码问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两艘国产航母疑将同时造
- 下一篇: 电脑屏幕出现彩色条纹_电脑屏幕出现条纹