10 Star 13 Fork 4

雷毅 / sniffer01

加入 Gitee
与超过 800 万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
工程名称: 01sniffer
应用名称: 零幺镜
运行平台: Windows 2000/XP/2003/Vista/7, 32位及64位
应用短语: 零幺镜--照看010101101001……程序员的编码与哈希随手小工具,编程人生系列工具之一
作者:   雷毅, 7662578@qq.com
      雷毅 @ OSC
创作时间:2011-2013
工程描述:
  零幺镜,01sniffer,用于程序员最快速地了解 UTF8、Unicode、GB 这些常见的字符集编码标准的真实存在!
  程序员常常遇到字符串编码紊乱的困惑,通过实时查看一个字符串在各种常见的字符集和编码下的内存存在,来强化一套标准的本质和外观上的模型,从而加强在编写程序时牢固地控制一份字符串数据的输入、处理、输出过程。
  通过零幺镜,我们可以感受到:“从本质上说,一切字符集和编码,其目标和手段都是围绕着需要无差错、甚至需要无歧义地进行数据的网络传送与数据存储这一根本目标而展开的”,这一本质规律。
  零幺镜也可以用于计算机专业基础科教学时作为辅助工具,帮助学员深刻地理解上述规律,并通过对常用的UTF8、Unicode、GB标准的快速感知建立,而打下计算机软件学科的数据处理基础。
  另外,零幺镜也提供了 Base64、MD5/MD5+Base64、SHA1等特别常见的数据编码和数据指纹校验的功能。

使用与学习指南:
  如何使用零幺镜程序?
    运行发布包中的 Output\ReleaseUnicode\01Sniffer.exe 执行程序即可。如果需要快捷方式,请自行创建。
      注:
        零幺镜会在当前目录创建 INI 文件,以保存历史转换记录、当前设置的数进制、是否截0等使用习惯数据。
        零幺镜是绿色程序,可以在任意目录运行,并继续使用 INI 记录文件
    零幺镜的一个亮点是:你可以对着乱码文字,把鼠标停留在一个合适的输入框里,跟着黑底绿字的泡泡提示框,仔细地审视乱码的产生过程。
    我敢保证:你从来没在哪本公开的教科书、标准、博客中看到这样言简意赅、深入浅出、生动形象(此处省略神龙教众口号若干……)的关于字符集和编码的描述:
      “UniCode,即如为‘中’字分配 0x4E2D 而‘1’字则把 ASCII/Latin 中的0x31升位为0x0031。
       Unicode是多国人员坐在一起来制订的,以便在同一空间中编码多国字符。
       常用的是2字节的 UCS2 标准,在 16bit 空间内,所有国家的文字独立编码互不重叠(汉字获得了其中约1/3的2万来个席位。但罕用文字装不进来,它们需使用UCS4)”

      “UTF8编码,即如把“1中”的Unicode数据 0x0031 0x4E2D 的“1”编短(2字节编为1字节后回到跟ASCII一样)、“中”编长(2变3),最后成为 31 E4 B8 AD
       通常用于网络传送和文件保存(因无0)。因为基于UniCode字符集,所以UTF8也可同时表达多国文字。
       Unicode字符编码为UTF8的规则如下:”

    
  如何使用零幺镜代码?
    您需要 Micirsoft VisualStudio 98,或者通常说的 VC++6 IDE环境,在其中导入工作空间文件 01siffer.dsw 即可
    关于4种编译配置:
      "Win32 Debug Unicode"
      "Win32 Release Unicode"
      "Win32 Debug MBCS"
      "Win32 Release MBCS"
      Debug 和 Release,不用说了吧?
      Unicode 和 MBCS:
        这是绝大多数程序员未消化的一件事,包括C/C++,也包括 JAVA 等。多数时候采用默认的配置跑起来没有乱码,一旦出乱码,就往往耽误几个小时甚至几天,最后怎么解决的也没弄清楚,因此是个大问题!
        简言之,有以下几个基本点:
          Unicode环境下的字符串,以2个字节作为一个文字字符;MBCS环境下的字符串,以1个字节作为一个文字字符,则基本相当于最先的 ASCII 字符串。
          只有Unicode环境下,一个字符串才能同时表达英文、俄文、中日韩文等各国文字(一共6万多个),而MBCS 环境下,只能同时表达英文加本国一国文字,本国文字采用该国自己的编码,比如汉字的 GB 编码
          往往存在着对网络发送的内容或者文件读写的内容进行编码转换,我们知道,在网络中和计算机文件读写接口中,字符串或者其它格式的数据,首先是以 Octect 即1个字节为单元进行 IO 交换的,在此之上,需要按照约定进行编码解码转换,才能保证达到不乱码的目的。
          在网络 OSI 模型中,一般在会话层和表示层中交换编码、字符集等信息,以便通信双方正确处理文字和数据,否则容易乱码。但是情况有时候变得糟糕,许许多多的开发者,一般都是照抄一段 UTF8 、ISO8859-1、GB3212、CodePage936 之类的字样搁在那里,只知其然不知其所以然,发生乱码的时候束手无策,一边修改一边祈祷玉帝保佑消除乱码
            我把本软件放到 OSC( http://www.oschina.net/),也是看到 红薯@OSC 在分析一个没有 Charset,甚至没有 Content-type 的 HTTP URL 服务而产生的中文乱码的事情,才想起来应该今天把这个软件提交给 OSC,让红薯推荐给程序员们使用了。
              红薯提到的网页是: http://www.lagou.com/joinNov/ex_list_oschina?status=%E6%8A%80%E6%9C%AF
              其实 googlecode.com 的 apache 也没有 charset,比如这个: http://webqq-core.googlecode.com/svn/incubator/WebQQCore/analyze.txt 。估计 googlecode 是要避免一刀切,把灵活性留给各国用户的浏览器们
							
            其实两周前在北京聊了红薯的天,我就想起来这件事,我可以把零幺镜这个工具通过 OSC 分享给程序猿类。咱们程序猿得多活出点人样对吧?
          在文件格式中,情况比网络环境中更糟糕一些。因为按照Unicode组织的建议,Unicode编码的文件,应该插入 0xFFFE 或者 0xFEFF 到头2字节。与此对应,UTF8编码的文件,应该插入 0xEFBBBF 或者 0xEFBFBE 到头3字节。但是这种被称之为 BOM 的东西,往往导致别人的不处理BOM的解析器直接晕倒。
          总之,在目前Unicode和非Unicode混用的时代,混淆是经常发生的。我们要作的事情有二:
            一是尽量弄明白字符集和编码的内在道理。这就是零幺镜工具的主要设计目的了;
            二是在作接口或数据结构设计的时候,由收发双方或者读写双方维持一个一致的字符集和编码动作
          在绝大多数时候,只要不是平台不支持的话,采用 UTF8是合适的。事实上多数平台都能正确处理 UTF8 ,但实质上通常是一次预处理,平台会把 UTF8 转换为 Unicode之后再进行下一步工作,也可能转回为 MBCS 之后再进行下一步工作。
          但是上述描述并不绝对,总之,在目前Unicode和非Unicode混用的时代,苹果、微软、Eclipse、Apache、UltraEdit 等等,都在字符集和编码面前遇到鱼和熊掌的麻烦,并在最终用户使用的时候发生编解码错误。甚至,这些巨头本身都在这件事情上直接出现错误,比如 Windows 的记事本程序,自己保存的“联通”文本文件,再打开就成了两个方块了。
      很明显,应该使用 Unicode 模式来编译零幺镜,才能同时使用多国文字。
      之所以提供 Unicode 和 MBCS 两种配置,就是为了让程序员跟踪运行代码中的以下类似段落,以便深入地熟悉字符集和编码:

------------------------------ 代码示例 ------------------------------
//输入框字符串转Unicode,用于处理 Unicode 和 Utf8 输入框
//返回新 new 的 Unicode 缓冲区(并需要调用者释放)及其长度
LPWSTR	CEncodeDecode::GetUnicodeFromEdit(const CString& csString, int& nUnicodeLen)
{
#ifdef _UNICODE	// Unicode 模式下,“中1”的内存是0x4E2D 0x0031,其中0x4E2D由国际标准组织分配,0x0031在ASCII分配的0x31基础上扩展为双字节
	nUnicodeLen = csString.GetLength();
	LPWSTR newUnicode=new WCHAR[nUnicodeLen];
	memcpy(newUnicode, csString, sizeof(WCHAR)*nUnicodeLen);	//直接复制即可
#else			//	MBCS方式下,“中1”的内存是0xD0D6 0x31,0xD0D6由中国人分配
	nUnicodeLen = MultiByteToWideChar(CP_ACP, 0, csString, csString.GetLength(), NULL, 0);
	LPWSTR newUnicode=new WCHAR[nUnicodeLen];
	MultiByteToWideChar(CP_ACP, 0, csString, -1, newUnicode, nUnicodeLen);	// 0xD0D6 0x31 经 ASCII/MBCS 转为 Unicode 得到 0x4E2D 0x0031
#endif	//end of #ifdef _UNICODE...#else...
	return newUnicode;
}
------------------------------ 代码示例结束 ------------------------------
    
分享与发布:
  http://blog.lalala.cn/01sniffer
	https://git.oschina.net/leiyi/sniffer01 ,感谢 OSC( http://www.oschina.net/)提供代码托管;感谢 红薯@OSC 的指引 !
  您可以任意处置本工程的源代码而无需知会本人,尽管在 OSC 中选择了 Apache V2 License,那不过是不得已的一个填写项而已。
  OSC 发布日期:2013年12月24日。再次感谢红薯、OSC以及其它大大!

版本维护:
  这本是一个自用的工具,所以可能不合您的胃口。
  以及,难免的,可能存在局部错误(但是请您放心,我和我的小伙伴们在试用的几年里,至少没有遇到过编解码错误、MD5/SHA1 计算错误)
  如果有必要的话,我们一起来加强它、修正它。
  反馈方式现在没有建好,应该顺着 http://blog.lalala.cn/01sniffer 	https://git.oschina.net/leiyi/sniffer01 能找到。敬请期待!



**************以下是 Microsoft Visual Studio 工程助手生成的 Readme.txt 内容,您可以忽略它*******************



























========================================================================
       MICROSOFT FOUNDATION CLASS LIBRARY : 01Sniffer
========================================================================


AppWizard has created this 01Sniffer application for you.  This application
not only demonstrates the basics of using the Microsoft Foundation classes
but is also a starting point for writing your application.

This file contains a summary of what you will find in each of the files that
make up your 01Sniffer application.

01Sniffer.dsp
    This file (the project file) contains information at the project level and
    is used to build a single project or subproject. Other users can share the
    project (.dsp) file, but they should export the makefiles locally.

01Sniffer.h
    This is the main header file for the application.  It includes other
    project specific headers (including Resource.h) and declares the
    C01SnifferApp application class.

01Sniffer.cpp
    This is the main application source file that contains the application
    class C01SnifferApp.

01Sniffer.rc
    This is a listing of all of the Microsoft Windows resources that the
    program uses.  It includes the icons, bitmaps, and cursors that are stored
    in the RES subdirectory.  This file can be directly edited in Microsoft
  Visual C++.

01Sniffer.clw
    This file contains information used by ClassWizard to edit existing
    classes or add new classes.  ClassWizard also uses this file to store
    information needed to create and edit message maps and dialog data
    maps and to create prototype member functions.

res\01Sniffer.ico
    This is an icon file, which is used as the application's icon.  This
    icon is included by the main resource file 01Sniffer.rc.

res\01Sniffer.rc2
    This file contains resources that are not edited by Microsoft 
  Visual C++.  You should place all resources not editable by
  the resource editor in this file.




/////////////////////////////////////////////////////////////////////////////

AppWizard creates one dialog class:

01SnifferDlg.h, 01SnifferDlg.cpp - the dialog
    These files contain your C01SnifferDlg class.  This class defines
    the behavior of your application's main dialog.  The dialog's
    template is in 01Sniffer.rc, which can be edited in Microsoft
  Visual C++.


/////////////////////////////////////////////////////////////////////////////
Other standard files:

StdAfx.h, StdAfx.cpp
    These files are used to build a precompiled header (PCH) file
    named 01Sniffer.pch and a precompiled types file named StdAfx.obj.

Resource.h
    This is the standard header file, which defines new resource IDs.
    Microsoft Visual C++ reads and updates this file.

/////////////////////////////////////////////////////////////////////////////
Other notes:

AppWizard uses "TODO:" to indicate parts of the source code you
should add to or customize.

If your application uses MFC in a shared DLL, and your application is 
in a language other than the operating system's current language, you
will need to copy the corresponding localized resources MFC42XXX.DLL
from the Microsoft Visual C++ CD-ROM onto the system or system32 directory,
and rename it to be MFCLOC.DLL.  ("XXX" stands for the language abbreviation.
For example, MFC42DEU.DLL contains resources translated to German.)  If you
don't do this, some of the UI elements of your application will remain in the
language of the operating system.

/////////////////////////////////////////////////////////////////////////////

仓库评论 ( 0 )

你可以在登录后,发表评论

简介

零幺镜--照看010101101001…… 帮助程序员进行中文和Unicode/UTF8等转换,并温习字符集与编码知识。同时还提供数进制的转换,最高处理64进制、八字节即 INTt64 VC++6平台 展开 收起
C++
取消

发行版

暂无发行版

sniffer01

贡献者

全部

近期动态

加载更多
不能加载更多了
C++
1
https://gitee.com/leiyi/sniffer01.git
git@gitee.com:leiyi/sniffer01.git
leiyi
sniffer01
sniffer01
master

搜索帮助

挂件 关闭按钮