tag 标签: unicode

相关博文
  • 2013-5-23 10:24
    483 次阅读|
    0 个评论
    最近在学fat32文件系统是如何组织硬盘上的数据存储的问题。   关于数据编码格式,fat32文件系统中的无论是中文字符还是英文字符都是以unicode编码的形式存在。   但如果要存储的是以这个名字命名的文件夹:“新建文件夹测试我是谁hellokitty”, 短文件名的中文字符也是以gbk编码的形式存在。比如以“测试”为名字的文件夹。 我们都知道为了兼容短文件名,需要截取长文件名的前六个字节加~1,组成短文件名,此时短文件名的编码方式为gbk编码。编码字符如下:D0 C2 BD A8 CE C4 7E 31。   而它的长文件名部分,则是以unicode编码格式存在。   而且fat32和ntfs格式的硬盘存储的文件或文件夹不区分大小写的,比如hello.c和HELLO.c,是不能同时存在同一个文件夹中。   可是linux的ext2,ext3,ext4对文件活文件夹的名字是区分大小写的。即hello.c和HELLO.c可以再同一目录存在。     而关于存在于优盘上的txt文件中的中文字符编码,则是以gbk编码形式存在。   英文字符则是以ascii码形式存在!!
  • 热度 14
    2011-10-11 15:52
    4445 次阅读|
    13 个评论
    这是我前些时间在移植UCGUI时编写的一个字体产生工具, 可以进行常用字体的产生, 以及从文件中提取文字生成字库。还有具备UNICODE与GB2312编码字符映射的功能。 共享给大家, 希望大家有用。 以下软件截图: 1、生成字符映射 2、生成GBK码 3、生成UNICODE码字库 4、从TXT文件中提取字库集 5、提取字库生成的文件如下: /******************************************************************* *                   UCGUI Font Convert Softwave V(1.0)             * *                   Author:Bruce.Yi                                * *                   Company: JingtongACT(yjp@jingtongact.cn)       * *                   Create Time: 2011-01-03  11:16                 * *******************************************************************/ //FileName: E:\Toolsnet\xyz.c, UCGUI font library file //FontName: KaiTi_13, Charset:UNICODE #ifndef __GUI_FLASH_H__  #define __GUI_FLASH_H__ #endif #include "..\core\GUI.H" extern GUI_FLASH const GUI_FONT GUI_FontHZ_KaiTi_13; GUI_FLASH  const unsigned char acFontHZKaiTi_13_H002e = {  { 7, 13, 1, (void GUI_FLASH *)acFontHZKaiTi_13_H002e},// .  { 7, 13, 1, (void GUI_FLASH *)acFontHZKaiTi_13_H002f},//  { 7, 13, 1, (void GUI_FLASH *)acFontHZKaiTi_13_H0030},// 0  { 7, 13, 1, (void GUI_FLASH *)acFontHZKaiTi_13_H0031},// 1  { 7, 13, 1, (void GUI_FLASH *)acFontHZKaiTi_13_H0032},// 2  { 7, 13, 1, (void GUI_FLASH *)acFontHZKaiTi_13_H0035},// 5  { 7, 13, 1, (void GUI_FLASH *)acFontHZKaiTi_13_H003a},// :  { 7, 13, 1, (void GUI_FLASH *)acFontHZKaiTi_13_H0061},//  { 7, 13, 1, (void GUI_FLASH *)acFontHZKaiTi_13_H0074},//  { 7, 13, 1, (void GUI_FLASH *)acFontHZKaiTi_13_H0077},//  { 14, 13, 2, (void GUI_FLASH *)acFontHZKaiTi_13_Ha3ba},// :  { 14, 13, 2, (void GUI_FLASH *)acFontHZKaiTi_13_Hb5c4},// 的  { 14, 13, 2, (void GUI_FLASH *)acFontHZKaiTi_13_Hb5d8},// 地  { 14, 13, 2, (void GUI_FLASH *)acFontHZKaiTi_13_Hb7c3},// 访  { 14, 13, 2, (void GUI_FLASH *)acFontHZKaiTi_13_Hb8fa},// 跟  { 14, 13, 2, (void GUI_FLASH *)acFontHZKaiTi_13_Hbba7},// 户  { 14, 13, 2, (void GUI_FLASH *)acFontHZKaiTi_13_Hbedd},// 据  { 14, 13, 2, (void GUI_FLASH *)acFontHZKaiTi_13_Hbfe2},// 库  { 14, 13, 2, (void GUI_FLASH *)acFontHZKaiTi_13_Hc2eb},// 码  { 14, 13, 2, (void GUI_FLASH *)acFontHZKaiTi_13_Hc3dc},// 密  { 14, 13, 2, (void GUI_FLASH *)acFontHZKaiTi_13_Hc3fb},// 名  { 14, 13, 2, (void GUI_FLASH *)acFontHZKaiTi_13_Hcafd},// 数  { 14, 13, 2, (void GUI_FLASH *)acFontHZKaiTi_13_Hceca},// 问  { 14, 13, 2, (void GUI_FLASH *)acFontHZKaiTi_13_Hd1f9},// 样  { 14, 13, 2, (void GUI_FLASH *)acFontHZKaiTi_13_Hd2bb},// 一  { 14, 13, 2, (void GUI_FLASH *)acFontHZKaiTi_13_Hd3c3},// 用  { 14, 13, 2, (void GUI_FLASH *)acFontHZKaiTi_13_Hd6b7},// 址 }; 以下节省 建议大家使用时尽量选用宋体字,其它字体可以某些字不能被被提取
  • 热度 13
    2010-12-30 12:16
    2874 次阅读|
    13 个评论
    前言 如 topic 所示, 这是一个很传统的知识点. 当我们的项目, 需要将 gb码转化为 Unicode 码时, 我们进行大量文章检索后, 郁闷发现, 很难找到现成的转换表文件为我们所用. 在发现一份被定义的转化表头文件后, Allen 如获珍宝, 立即将该转换表数组, 做成一个转换文件, 以节省同行进行同议题探讨的时间. 工作步骤 1. 获取gb2unicode 头文件: 因为匆忙工作, 未能记录下从哪位同仁的blog中获得, 该 gb2unicode 的码表头文件.对此这里表歉意了. 该头文件定义如下: //#typedef  unsigned short int   uint16;  #define MAX_UNI_INDEX  6768 //const uint16 GB_TO_UNI = const unsigned short int GB_TO_UNI =  {   {0x554A,0xB0A1},//GB2312:啊 {0x963F,0xB0A2},//GB2312:阿 {0x57C3,0xB0A3},//GB2312:埃 {0x6328,0xB0A4},//GB2312:挨 // ... {0x9F3D,0xF7FC},//GB2312:鼽 {0x9F3E,0xF7FD},//GB2312:鼾 {0x9F44,0xF7FE}//GB2312:齄 }; 2. 生成 gb2unicode.bin 文件: void CBuild_GBtoUnicode_fileDlg::OnButtonBuild() {  CString strPath = GetDeviceFullPath();  CString strFileName = strPath + "gb2unicode.bin";  // build file  CString sTemp;  CFile file( strFileName, CFile::modeCreate | CFile::modeWrite );  BYTE tmp ;  memset(tmp, 0, sizeof(tmp));  for(int i=0; i  tmp = GB_TO_UNI 8;   tmp = (BYTE)GB_TO_UNI ;   tmp = GB_TO_UNI 8;   tmp = (BYTE)GB_TO_UNI ;      file.Write(tmp, sizeof(tmp));  }  file.Close();  CString sMsg = "Build " + strFileName + " successed!";  AfxMessageBox(sMsg); } 3. 使用二分法基于GB码之索引查找Unicode 码  void CBuild_GBtoUnicode_fileDlg::OnButtonTrax() {  BYTE sTemp ;    memset(sTemp, 0, sizeof(sTemp));  m_editChar.GetWindowText((char*)sTemp, sizeof((char*)sTemp));  UINT len = strlen((char*)sTemp);  UINT index = 0;  BOOL flag = FALSE;  if(len == 1) {   if(sTemp 127) { flag = TRUE; }  }  else if(len == 2) {   index = (sTemp 8) + sTemp ;   if( (index0xb0a1) || (index0xf7fe) ) { flag = TRUE; }  }  else {   flag = TRUE;  }  if(flag == TRUE) {   AfxMessageBox("Please input the correct Chinese char or ascII char!");   return;  }  // do trax  CString sSource, sDirection;  // arcII char  if(len == 1) {   sSource.Format("0x%x", sTemp );   m_editSrc.SetWindowText(sSource);   sDirection.Format("0x00 0x%x", sTemp );   m_editDrt.SetWindowText(sDirection);  }  // gb char with lookup table of bin file  else if(len == 2) {   sSource.Format("0x%x 0x%x", sTemp , sTemp );   m_editSrc.SetWindowText(sSource);   // find unicode code based on gb code   CFile file;   CString strPath = GetDeviceFullPath();   CString sBinFilename = strPath + "gb2unicode.bin";   if(!file.Open(sBinFilename, CFile::modeRead)) {    AfxMessageBox("File can NOT be openned!");    return;   }   // half mothed   int low,high,mid;   low = 0; high = MAX_UNI_INDEX;   UINT gbcode_mid = 0;   BYTE tmp ;   while(low  {    mid = (low+high)/2;    file.Seek((mid2)+2, CFile::begin);    file.Read((char*)tmp, 2);    gbcode_mid = (tmp 8) + tmp ;    if( index gbcode_mid ) high--;    else if( index gbcode_mid ) low++;    else break;   }   if(lowhigh) {    AfxMessageBox("Cannot find gb char in current gb2unicode table!");    return;   }   // result   file.Seek( (mid2),  CFile::begin );   file.Read((char*)tmp, 2);      sDirection.Format("0x%x 0x%x", tmp , tmp );   m_editDrt.SetWindowText(sDirection);      file.Close();  } } 验证 使用一个测试工具, 我们验证了头尾以及中间若干GB码. 其结果与头文件之码表数组均一一匹配. 总结 在GB to UNICODE 这个传统的topic 中, 我们借助网络查询, 在接近1个工作日的时间内, 并没有找到一个合适的转换文件. 故基于一个转化数组的帮助下, 我们制作了该转换文件, 一般可用于保存在 FLASH 中, 供同行们使用 MCU 来检索对应的 UNICODE 码. 同时, 要指出因为二分法的使用, 查表的速度应符合普通应用. 我们记录工作于此 blog, 我们希望能有助于同行进行类似的工作,  不再浪费宝贵的工程时间于此传统议题上. Allen 作于深圳福田 2010.12.30
  • 热度 1
    2010-9-11 13:03
    1900 次阅读|
    1 个评论
    目的 在VC的ANSI编译环境下读取Unicode文件长度. 说明 在 ANSI 的环境下, 使用 file.GetLength() 读取 Unicode file, 将返回错误的数据. 我们顺手写了小函数, 用于读取 Unicode file length. 我们使用的思路基于, unicode 的每个字符一定是 2bytes. 我们返回的长度值, 包括文件头: 0xff 0xfe 或 0xfe 0xff 的长度. 并对一个文件的例子作了简单的测试. 例程 // if file isnot existed or unicode file, then return 0, or the whole filelen including head int CSetMsg::ReadUnicodeFileLen(CString sFilename) {  int len = 0;    CFile file;  if(!file.Open(sFilename, CFile::modeRead)) { return 0; }  BYTE head ;  file.Read(head, 2);   if((head ==0xffhead ==0xfe)||(head ==0xfehead ==0xff) ) {   file.Seek(2, CFile::begin); //0xfffe   len = 2;      char tmp ;   while(file.Read((char *)tmp,2)0) {    len += 2;   }  }  else {   //AfxMessageBox("File is NOT Unicode!");  }   file.Close();  return len; } Allen 2010.09.11
相关资源
  • 所需E币: 5
    时间: 2019-12-25 16:40
    大小: 285.47KB
    上传者: 978461154_qq
    本软件可以从WINDOWS任意矢量字体中,提取64*64以下的任意大小点阵字库,并支持字库的单个修改功能。是单片机开发和嵌入式开发人员的不可缺少的工具!详细使用请看下载文件中的开发文档。支持汉字,韩文,日文,ASCII,等UNICODE中包含的所有字符转换!操作方便,简单明了!在注册前,可以生成16×16以下的测试字库!需要生成大于16x16字库和字库修改功能的,可以与作者联系。……
广告