怎样确定一个16bit的字符是否是中文呢?

firemount 2000-07-19 12:48:00
怎样确定一个文件是否是文本文件?

我这样做了,读取一些字符,转化为unicode,
然后用iswasii确定是否asc字符,
但这对英文文件可以,其中有中文就不行了,

怎样确定一个16bit的字符是否是中文呢?
谢谢!


...全文
326 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
firemount 2000-07-20
  • 打赏
  • 举报
回复
我按“两个字节的的首位都是1”这样做了,
对于不是unicode的文件可以识别了,
但是对于unicode的文本文件,根本不行,
该怎么做呢?
Un1 2000-07-20
  • 打赏
  • 举报
回复
文本文件没有任何文件头,连notepad都不去确认。
firemount 2000-07-20
  • 打赏
  • 举报
回复
可是如果是中英文混排呢?很可能这样。

我的主要问题是不根据文件后缀名想要确定该文件是否是文本文件,
有没有别的什么办法?

谢谢!
ad 2000-07-19
  • 打赏
  • 举报
回复
你不要转化为unicode,直接读就是了,如果读出的字节最高位为1,则可能是半个汉字,继续读入下一字节,然后组成一个汉字。
firemount 2000-07-19
  • 打赏
  • 举报
回复
我试了一下,好象并不是你说的那样,
如“我”是25105,换成二进制是01100010 00010001
“他”是20182,换成二进制是01001110 11010110


zxi666 2000-07-19
  • 打赏
  • 举报
回复
一个中文字符占两个字节,这两个字节的的首位都是1,你可以通过这个方法来判断是否是中文字符。当然,首先是要保证仅仅是中文和英文的混合,如果由其他的文字(比如俄文之类)我就不知道该怎么办了!判断的时候要注意的是,中文都是两个两个字节的,因而你还要判断是否只读了半个中文,这其实很简单,只要你在判断时有一个记数就可以了。
使用说明   超高速   从QR Code码的英文名称Quick Response Code可以看出,超高速识读特点是QR Code码区别于四一七条码、Data Matrix等二维码的主要特性。由于在用CCD识读QR Code码时,整个QR Code码符号中信息的读取是通过QR Code码符号的位置探测图形,用硬件来实现,因此,信息识读过程所需时间很短,它具有超高速识读特点。用CCD二维条码识读设备,每秒可识读30个含有100个字符的QR Code码符号;对于含有相同数据信息的四一七条码符号,每秒仅能识读3个符号;对于Data Martix矩阵码,每秒仅能识读2~3个符号。QR Code码的超高速识读特性使它能够广泛应用于工业自动化生产线管理等领域。   全方位   QR Code码具有全方位(360°)识读特点,这是QR Code码优于行排式二维条码如四一七条码的另一主要特点,由于四一七条码是将一维条码符号在行排高度上的截短来实现的,因此,,它很难实现全方位识读,其识读方位角仅为±10°。   能够有效地表示汉字   由于QR Code码用特定的数据压缩模式表示汉字,它仅用13bit可表示一个汉字,而四一七条码、Data Martix等二维码没有特定的汉字表示模式,因此仅用字节表示模式来表示汉字,在用字节模式表示汉字时,需用16bit(二个字节)表示一个汉字,因此QR Code码比其它的二维条码表示汉字的效率提高了20%。
PS10 1一个字长为6位的无符号二进制数能表示的十进制数值范围是〔。 A> 0~64 B> 0~63 C> 1~64 D> 1~63 [解析]无符号二进制数的第一位可为0,所以当全为0时最小值为0,当全为1时最大值为2^ 6-1=63。 2Internet实现了分布在世界各地的各类网络的互联,其最基础和核心的协议是〔。 A> HTTP B> TCP/IP C> HTML D> FTP [解析]Internet实现了分布在世界各地的各类网络的互联,其最基础和核心的协议是TCP /IP。HTTP是超文本传输协议,HTML是超文本标志语言,FTP是文件传输协议。 3假设邮件服务器的地址是email.bj163,则用户正确的电子邮箱地址的格式是〔。 A> 用户名#email.bj163 B> 用户名email.bj163 C> 用户名email.bj163 D> 用户名$email.bj163 [解析]电子邮件地址由以下几个部分组成:用户名域名.后缀。 4下列说法中,正确的是〔。 A> 只要将高级程序语言编写的源程序文件〔如try.c的扩展名更改为.exe,则它就成为可执 行文件了 B> 高档计算机可以直接执行用高级程序语言编写的程序 C> 高级语言源程序只有经过编译和链接后才能成为可执行程序 D> 用高级程序语言编写的程序可移植性和可读性都很差 [解析]计算机只能直接执行机器语言,高级语言要经过编译链接后才能被执行,高级语言 的可移植性和可读性都很好。 5计算机技术中,下列不是度量存储器容量的单位是〔。 A> KB B> MB C> GHz D> GB [解析]GHz是主频的单位 6能保存网页地址的文件夹是〔。 A> 收件箱 B> 公文包 C> 我的文档 D> 收藏夹 [解析]收藏夹可以保存网页地址。 7根据汉字国标GB2312-80的规定,一个汉字的内码码长为〔。 A> 8bit B> 12bit C> 16bit D> 24bit [解析]一个汉字是两个字节,一字节是8bit,所以就是16bit 8下列属于计算机程序设计语言的是〔。 A> ACDSee B> Visual Basic C> Wave Edit D> WinZip [解析]常见的程序设计语言是C、C++、Visual Basic、Visual C++等,因此答案选择B。 9在各类程序设计语言中,相比较而言,执行效率最高的是〔。 A> 高级语言编写的程序 B> 汇编语言编写的程序 C> 机器语言编写的程序 D> 面向对象的语言编写的程序 [解析]在各种程序设计语言中,只有二进制代码组成的机器语言才能被计算机直接执行, 其他的语言都必须进行编译,翻译成二进制代码才可被执行。因此答案选择C。 10操作系统的主要功能是〔。 A> 对用户的数据文件进行管理,为用户管理文件提供方便 B> 对计算机的所有资源进行统一控制和管理,为用户使用计算机提供方便 C> 对源程序进行编译和运行 D> 对汇编语言程序进行翻译 [解析]操作系统的主要功能是管理计算机的所有资源〔硬件和软件。 11汉字区位码分别用十进制的区号和位号表示。其区号和位号的范围分别是< >。 A> Windows XP和管理信息系统 B> Unix和文字处理程序 C> Linux和视频播放系统 D> Office 2003和军事指挥程序 [解析]常见的系统软件有操作系统、数据库管理系统、语言处理程序和服务性程序等,A 、B、C选项中的Windows XP、Unix、Linux均属于操作系统。Office 2003和军事指挥程 序都是属于应用软件,因此答案选择D。 12在下列字符中,其ASCII码值最小的一个是〔。 A> 9 B> p C> Z D> a [解析]ASCII码〔用十六进制表示为:9对应39,p对应70,Z对应5A,a对应61。 13"千兆以太网"通常是一种高速局域网,其网络数据传输速率大约为〔。 A> 1000位/秒 B> 1000000000位/秒 C> 1000字节/秒 D> 1000000字节/秒 [解析]根据网络数据传输速率的公式可知,1Kbps=1000bps,1Mbps=1000000bps,1Gbps=10 00000000bps,1Tbps=1000000000000bps。即千兆以太网的网络传输速率大约为10000000 00bps,即为1000000000位/秒。答案选择B。 14Modem是计算机通过线接入Internet时所必需的硬件,它的功能是〔。 A> 只将数字信号转换为模拟信号 B> 只将模拟信号转换为数字信号 C> 为了在上网的同时能打 D> 将模拟信号和数字信号互相转换 [解析]调制解调器〔即Modem,是计算机与线之间进行信号转换的装置,由调制器和解调器 两部分组成,
可能感兴趣的项目设计:应用于 POS 机、收银机等80mm 高速微型打印机(原理图、上位机、程序源码) 附件内容截图: 字库改组: 为了便于处理,我们对字模进行如下改组: 把 16 X 16 汉字,分成左边从上到下16个字节,和右边16个字节,目的是可以把一个汉字当成两个 16X8 字母或数字处理。 改组后,字模数据从 RAM 读出送往打印机时,无论是汉字还是字母或数字,第n行点的 "字节数据" 就是: n, n+16, n+16*2, n+16*3......一行取48个字节, 8*48=384 个点。 把 24 X 24 汉字,分成左边从上到下 24行 X 12列, 和右边 24 X 12 数据,一行 12bit 数据存放在半字 16bit 中的低12bit, 左右半边都有 24个"半字",或 48 个字节,一个24X24汉字变成96个字节了。如此处理字模时,把一个汉字当成两个 24 X 12 字母或数字来处理。 不管汉字字母或数字,第n行点的 ”半字数据“ 就是 n,n+24,n+24*2,n+24*3......取32个"半字",刚好够 12bit*32=384 个点,即一行可打 32个字母,或16个汉字。 字模写入 SPI FLASH 时,完成以上变换。打印时,NUC123 从 SPI FLASH 读出的字模,认为是上述变换后的格式。 高速 SPI 接口传输数据 打印时,字模数据要从 W25Q16 中通过 SPI 接口读取,再通过 SPI 接口移入打印头。 一行 16个 24 X 24 汉字有 16*96 = 1536 个字节。字符行与行之间一般有一到三个空行,走纸最快时 90mm/秒,694us 走一行,在这个时间内要读取所有 1536个字节,放入 RAM 打印缓冲区。代码中,把 SPI 配置成 28.8Mbps 从FLASH 中读取字模,为便于用示波器查看波形,每次收发 16bit 中间,插入一个空闲 CLK,收发完 1536 Byte 要经过 1536/2 = 768 次 17bit 时钟,时间为 768*17/28.8 = 453us。关键是 SPI 收发 16bit 中间不能再有额外间隙,否则 28.8Mbps 失去意义,所以代码中,使能 SPI 的 FiFo,同时配置 PDMA 来完成 SPI 收发。 点数据移入打印头,SPI 速率配置为 4.8Mbps,384个点。数据传输时间约为 384/4.8 = 80us,走纸最快 90毫米/秒 时 694us走一行,数据早传完了。走纸速度再快一倍也来得及。 USB 打印机模式 USB 打印模式,上位机传输过来的,是图形点阵数据与命令混在一起,无需从 SPI FLASH 中读字模,只要把点数据从USB数据流里分离出来,移入打印头即可。代码中定义了一个 4096 字节的环形缓冲区。 USB 数据中断: 分析数据流,见函数 PTR_Data_Receive(), 遇图形点阵数据流,写入环形缓冲区。遇命令立即执行,或为执行做好准备。若有打印命令或走纸命令,就把 “走纸行数” 通过全局变量 StepIncrease 传给主循环代码。 主循环里,1>若传过来的走纸行数 StepIncrease 不为0,就启动走纸。2>若已在走纸,就检查环形缓冲区是否有待打印数据——比较写入指针与读出指针的值可得知,若有待打印数据,就会在纸每走过一行时,把数据送入打印头并加热打印。 走纸,加热和数据传输,三者同时处理的时序 需要走纸时,只要设定速度值全局变量 pStepM_TimLimit,然后调用走纸启动函数 PaperRollStart() 就开始走纸了,何时走下一行,何时停止,都在 Timer1 中断代码里处理。中断外面无需再处理走纸的事。 需要说明的是:有一个走纸剩余行数全局变量 RemainderStep, 在此变量非0时,可以随时加大这个值,加长走纸行数。 再来看何时把数据串入打印头,何时加热,下图用鼠标点击可放大。 打印开始时,先启动走纸,前面空一两行没事,一行只有 0.0625mm。 把第一行点数据,串入打印头后,就等待走纸到第三行——由剩余步数全局变量 RemainderStep 的值可得知。只要一走到第三行,立即输出点数据到加热头,并启动加热定时。然后就去处理下一行点数据。 每次在走到新的一行时(实际是两行), 都立即启动已准备好的、这一行数据的加热,接着代码去准备下一行点数据。 何时加热停止呢? 不用担心,由 Timer2 中断代码处理了。 打印开始时,必须知道要走几行, 两行一个点,一行 16 X 16 字符,要走 32行,一般还要加上开头和结尾的空行。 连续打印时,只要剩余行数 RemainderStep 不为0——走纸未停,可以随时增加这个值,加长走纸行数,继续打

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧