VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 2371|回复: 9

[讨论] 如何辨别是GB2312还是UTF_8编码

[复制链接]
发表于 2012-11-1 11:55:15 | 显示全部楼层 |阅读模式
本帖最后由 lmgz2007 于 2012-11-1 11:56 编辑

如题
例如获得“国”的编码分别是C2B0和9CE5,能不能辨别哪个是GB2312哪个是utf8?

点评

单就这两个编码来看,偶只知道C2B0可能是GB码,9CE5一定不是GB码  发表于 2012-11-2 08:40
两个都不是UTF8,中文的UTF8都是3个字节的  发表于 2012-11-1 18:47
发表于 2012-11-1 12:35:05 | 显示全部楼层
编码识别
网上有代码吧
你找找看
很多都是翻译的火狐的那个
这个要数据越多识别率越高
只有两个字节的话识别率会很低
回复 支持 反对

使用道具 举报

发表于 2012-11-1 17:17:08 | 显示全部楼层
单凭两个是不能识别的!
但是你可以先确定其中一个编码的对应汉字,再确定编码形式。
回复 支持 反对

使用道具 举报

发表于 2012-11-1 21:47:14 | 显示全部楼层
仅凭几个字符分辨不同来的。
一般情况下,是对文件进行的识别,
UTF8文件开头是“EF BB BF ”

点评

UTF8的html文件就没有此前缀,另外Linux下的UTF8文本文件也没有  发表于 2012-11-1 22:36
回复 支持 反对

使用道具 举报

发表于 2012-11-1 22:01:33 | 显示全部楼层
本帖最后由 19900603 于 2012-11-1 22:06 编辑

调用
Public Declare Function LenA Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long
Public Declare Function LenW Lib "kernel32" Alias "lstrlenW" (ByVal lpString As Long) As Long

试试吧  获取字符串长度 不知道可行否


点评

获取字符串长度有任何用处么?  发表于 2012-11-1 22:35
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-2 19:10:23 | 显示全部楼层
偶只知道C2B0可能是GB码,9CE5一定不是GB码

怎么判断的?

点评

>=  发表于 2012-11-3 08:18
GB码收录汉字较少,其编码范围也就较小,比如:单字节一定>A0  发表于 2012-11-3 08:15
貌似GB码有一定的范围的,不过具体资料不懂去那里查  发表于 2012-11-2 19:46
回复 支持 反对

使用道具 举报

发表于 2012-11-2 20:19:57 | 显示全部楼层
以前做过一个获取本机公网IP的程序,涉及到GB2312和UTF-8识别问题,专门研究过这个。但是我现在不玩儿VB有两年了~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-3 15:48:17 | 显示全部楼层
红色狂想 发表于 2012-11-2 20:19
以前做过一个获取本机公网IP的程序,涉及到GB2312和UTF-8识别问题,专门研究过这个。但是我现在不玩儿VB有两 ...

研究结果怎样的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-11-3 23:11:36 | 显示全部楼层
本帖最后由 lmgz2007 于 2012-11-3 23:13 编辑

网上查找了资料,自己写了个函数,主要用于网页数据处理,基本能够自动转换GB2312和UTF8,有兴趣的朋友测试一下


  1. Function BtoS(ByRef B() As Byte) As String
  2.     Dim i As Long
  3.     Dim j As Long
  4.     Dim k As Long
  5.     Dim TD() As Byte
  6.     Dim a1 As Byte
  7.     Dim a2 As Byte
  8.     Dim a3 As Byte
  9.     Dim s As String
  10.     Dim ss As String
  11.     For i = 0 To UBound(B)
  12.         If B(i) < &H80 Then
  13.             ss = ss & Chr(B(i))
  14.         Else
  15.             If B(i) > &HE0 And B(i) < &HF0 Then
  16.                 ReDim TD(1)
  17.                 a1 = B(i) Mod &HE0&
  18.                 If i < UBound(B) Then a2 = B(i + 1) Mod &H40&
  19.                 If i < UBound(B) - 1 Then a3 = B(i + 2) Mod &H40&
  20.                 k = a1 * &H1000& + a2 * &H40& + a3
  21.                 TD(1) = k \ &H100&
  22.                 TD(0) = k Mod &H100&
  23.                 s = TD
  24.                 ss = ss & s
  25.                 i = i + 2
  26.             Else
  27.                 ss = StrConv(B, vbUnicode)
  28.                 Exit For
  29.             End If
  30.         End If
  31.     Next i
  32.     BtoS = ss
  33. End Function
复制代码
回复 支持 反对

使用道具 举报

发表于 2012-11-4 18:34:16 | 显示全部楼层
lmgz2007 发表于 2012-11-3 15:48
研究结果怎样的?

结果是大多数情况下都能正常识别,少数情况下会识别错误。最后只好采取分析html文档中的UTF-8标记来补偿一下了。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-9-25 15:54

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表