用dreamware 2004 保存了一个含中文的HTML文件,我用TNT包的TntMemo1.Lines.LoadFromFile 方法和delphi自带的Memo1.Lines.LoadFromFile方法打开该文件,都出现中文乱码,但把该文件用 “记事本”可以正常打开, 用记事本打开后,另存为任何一种的编码格式(ANSI/Unicode/UTF8/Unicode big endian)的文件都可以在TntMemo1中打开,未另存前是乱码的,这是怎么回事?难道DReamweaver用的是火星编码?应该是UTF8吧有没有一个比较好用解决文件编码的方法或控件?有就请赐教一下。HTMl文件连接URL为:http://office.tradepolywtc.com/ttt.rar

解决方案 »

  1.   

    tntware的procedure TTntStrings.LoadFromFile方法中调用AutoDetectCharacterSet通用是否有bom来判断是否是utf-8、utf-16 le、utf-16 be几种编码,否则认为是ANSI编码html文件不需要bom,而是通过content.charset标识编码类型(如<meta http-equiv=content-type content="text/html; charset=UTF-8">)。windows自带的notepad不仅仅通过bom判断文件编码,同时也会采用统计的方式判断是否为utf-8的编码。但是这种统计的方式需要建立在大量文本的前提下,小量文本很可能出现非utf-8的编码正好使用了utf-8可识别的编码方式,所以也容易出现误判(如在notepad中输入文本“联通”、“小小”用ANSI方式保存,再打开时将变成“乱码”,原因是被误识别为utf-8编码了)。当用notepad另存的时候,如果是utf-8、utf-16 le、utf-16 be的话,它会自动给加上bom,这时再用TntMemo打开的话,TTntStrings.LoadFromFile就可以通过bom识别出编码了由于对不带bom的utf-8都只能基于统计进行判断,所以不可能找到一个完美的解决办法