ASCII、unicode、utf

网上有关“ASCII、unicode、utf”话题很是火热,小编也是针对ASCII、unicode、utf寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。

机器只认识 1 和 0 ,所以人为了能用自己的语言与机器交互,规定出了各种 二进制与语言字符的对应关系,即编码

最早普及的编码集为 ASCII 码,它用一个字节(8位二进制)规定了128个字符的编码(首位二进制统一为0,2^7个),主要都是英文字符。

英语使用 ASCII 中规定的128个字符就足够了, 但是却远远不足以表示其他语言,即使是利用上首位的二进制 ,于是出现了各国语言的编码,比如支持简体中文的 GB2312 ,支持繁体中文的 BIG5 。使得在解析文件时还需要注意它的编码格式,否则就会乱码,因为不同的编码对二进制会有不同的解读。

unicode 码在这种背景下诞生了, 它统一了全世界的语言符号 。使用 U+**** 表示, * 为16进制数.

unicode 在实际应用中是有问题的,比如 对于多字节字符,如何让机器知道这是一个字符而不是多个字符 ,所以在与机器实际交互中,需要将unicode转换格式后使用,这就出现了UTF(UTF,是UnicodeTransformationFormat的缩写,意为Unicode转换格式),包括utf-32、utf-16、utf-8等等。

规则: 每个码点使用四个字节表示,字节内容一一对应 unicode 码点

缺点: 浪费空间 。如果一个全是英文的文件,每个字符都会浪费三个字节的空间,因为每个英文字符一个字节就可以表示。

规则:

规则:

这里指的文本是用于Windows系统中的扩展名为.txt的文件。

Notepad(记事本)只支持四种格式:ANSI/Unicode/Unicode big endian/UFT-8,在Delphi中如何判断与读取这些不同格式的文本呢?

首先,不同编码的文本,是根据文本的前两个字节来定义其编码格式的。定义如下:

ANSI: 无格式定义;

Unicode: 前两个字节为FFFE;

Unicode big endian: 前两字节为FEFF;

UTF-8: 前两字节为EFBB;

知道了各种编码格式的区别,写代码就容易了,以下是我在一个软件中写的处理代码:

(注意,Delphi的TMemo/TRichEdit只支持ANSI的文本文件,其它编码格式的文件需要

自行写代码转换成GB2312或BIG5,方能正确显示)

type

TTextFormat=(tfAnsi,tfUnicode,tfUnicodeBigEndian,tfUtf8);

const

TextFormatFlag:array[tfAnsi..tfUtf8] of word=($0000,$FFFE,$FEFF,$EFBB);

function WordLoHiExchange(w:Word):Word;register;

asm

XCHG AL, AH

end;

{ TextFormat返回文本编码类型,sText未经处理的文本 }

procedure ReadTextFile(const FileName: string;

var TextFormat: TTextFormat; var sText:string);

var

w:Word;

b:Byte;

begin

with TFileStream.Create(FileName,fmOpenRead or fmShareDenyNone) do

try

Read(w,2);

w:=WordLoHiExchange(w);//因为是以Word数据类型读取,故高低字节互换

if w = TextFormatFlag[tfUnicode] then

TextFormat:= tfUnicode

else if w = TextFormatFlag[tfUnicodeBigEndian] then

TextFormat:= tfUnicodeBigEndian

else if w = TextFormatFlag[tfUtf8] then

begin

Read(b,1);//这里要注意一下,UFT-8必须要跳过三个字节。

TextFormat:=tfUtf8;

end else

begin

TextFormat:=tfANSI;

Position:=0;

end;

SetLength(sText,Size-Position);

ReadBuffer(sText[1],Size-Position);

finally

Free;

end;

end;

关于“ASCII、unicode、utf”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!

(1)

猜你喜欢

发表回复

本站作者才能评论

评论列表(3条)

  • 小风的头像
    小风 2026年02月23日

    我是零碳号的签约作者“小风”

  • 小风
    小风 2026年02月23日

    本文概览:网上有关“ASCII、unicode、utf”话题很是火热,小编也是针对ASCII、unicode、utf寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,...

  • 小风
    用户022308 2026年02月23日

    文章不错《ASCII、unicode、utf》内容很有帮助

联系我们:

邮件:零碳号@gmail.com

工作时间:周一至周五,9:30-17:30,节假日休息

关注微信