Кратко съдържание


Глава 9. Символни низове (Strings)



страница61/73
Дата21.07.2018
Размер9.03 Mb.
#76887
1   ...   57   58   59   60   61   62   63   64   ...   73

Глава 9. Символни низове
(Strings)

Необходими знания


  • Базови познания за общата система от типове в .NET Framework

  • Базови познания за езика C#

Съдържание


  • Стандартът Unicode

  • Типът System.Char

  • Символни низове. Класът System.String

  • Escaping последователности

  • Ефективно конструиране на низове чрез класа StringBuilder

  • Форматиращи низове

  • Класът StringInfo

  • Интернационализация и култури

  • Парсване на числа и дати

  • Кодиращи схеми и конвертиране. Класът System.Text.Encoding

  • Кодиране Base64

  • Работа с Unicode във Visual Studio .NET

В тази тема ...


В тази тема ще се запознаем с начина на представяне на низовете в .NET Framework и с методите за работа с тях. Ще разгледаме какви кодиращи схеми се използват при съхраняване и пренос на текстова информация и как се решава въпросът с подредбата на байтовете. Ще се спрем подробно на различните начини за манипулиране на низове, предоставени ни от FCL, както и на някои практически съображения при работа с класовете, според решаваната задача. Ще видим как настройките за държава и култура определят вида на текста, показван на потребителите, и как можем да форматираме изхода в четлив и приемлив вид. Ще се запознаем също и с начините за преобразуване на вход от потребителя от текст в обект от стандартен тип, с който можем лесно да работим.

Стандартът Unicode


Стандартът Unicode играе много съществена роля при работата с текст в повечето съвременни софтуерни платформи. Неговата история е дълга и интересна. Той възниква в резултат от усилията за създаване на единна система за представяне на всички азбуки и езици и се налага все повече като универсално средство за представяне на текстова информация.

Преди да се запознаем със средствата на .NET Framework за работа със символни низове и текст, ще разгледаме Unicode стандарта, тъй като низовете в .NET Framework вътрешно са базирани на този стандарт.


В началото бе ASCII


В началните години от развитието си компютърната техника е съсредо­точена в Северна Америка. Софтуерът по това време е бил създаван за ползване предимно в англоезични среди. Текстовите данни са били пред­ставяни чрез ASCII или EBCDIC символи. За един такъв символ е нужен 1 байт памет: за кодирането на ASCII символ - 7 бита, а за EBCDIC – 8 бита.

Постепенно в останалата част на света се разработват други системи за съхраняване на символи. В Япония това са JIS символите, за руския език се налага KOI8 стандартът, а индийските езици се представят с няколко ISCII стандарта. Изброените стандарти дефинират кодови таблици с двоично представяне на буквите, цифрите и някои други символи.

Ето как изглежда кодовата таблица, дефинирана от стандарта ASCII (American Standard Code for Information Interchange):


00-25

26-51

52-77

78-103

104-127

NUL

SOH


STX

ETX


EOT

ENQ


ACK

BEL


BS

HT

LF



VT

FF

CR



SO

SI

DLE



DC1

DC2


DC3

DC4


NAK

SYN


ETB

CAN


EM

SUB

ESC


FS

GS


RS

US


SP

!

"



#

$

%



&

'

(



)

*

+



,

-

.



/

0

1



2

3


4

5

6



7

8

9



:

;

<

=

>

?



@

A

B



C

D

E



F

G

H



I

J

K



L

M


N

O

P



Q

R

S



T

U

V



W

X

Y



Z

[

\



]

^

_



`

a

b



c

d

e



f

g


h

i

j



k

l

m



n

o

p



q

r

s



t

u

v



w

x

y



z

{

|



}

~

DEL



ASCII дефинира 127 символа и представя всеки от тях със 7-битово число. Тези символите включват латинските букви, цифрите, някои често изпол­звани знаци и някои служебни символи със специално предназна­чение. Тъй като ASCII е бил въведен преди много време, част от специалните символи за загубили значението си.

Unicode


Unicode е проект, който има за цел да замести съществу­ващите символни кодови таблици. Голяма част от тях не са всеобщо приети, което създава проблеми при пренос на данни между различни среди и платформи. Въпреки техническите трудности и мащабността на проекта, Unicode се е наложил като стандарт при интернационализацията на софтуера. Той съ­държа изключително богат набор от символни дефиниции. Unicode е приет и като основа за представяне на текст в много операционни системи, платформи и стандарти (XML, Java, .NET Framework и др.).

Символите в Unicode


Unicode е стандарт, предоставящ уникален номер за всеки един знак (букви, йероглифи, математически символи и др.) с цел универсалност при съхраняването им в цифров вид при различни операционни системи и езикови среди.

Версия 4.0 на Unicode стандарта дефинира близо 100 000 символа и може да поддържа над 1 милион различни знака (чрез комбинация от символи).

Стандартът Unicode се развива постоянно под контрола на Unicode консор­циума (www.unicode.org) – добавят се нови символи, утвърждават се нови спецификации и т. н.

Обикновено Unicode символите се записват с "U+" и съответния номер в шестнайсетичен вид.

Например символът "листо" на традиционен китайски се записва като U+8449. Това съответства на десетичния номер 33865. За да представим този символ в сорс код на C# трябва да използваме шест­найсетичния номер и да укажем, че това е Unicode символ, чрез записа "\u8449". Същият символ в езика HTML се записва като или .

Да разгледаме още един пример за Unicode символ – музи­калният знак "нота шестнайсетина". Стандартно този символ се записва в Unicode като U+1D161, което съответства на десетичния номер 119137. В HTML можем отново да използваме два записа, съответстващи на шестнайсетичния и десетичния номер 𝅘𝅥𝅯 и 𝅘𝅥𝅯. При записа на този символ в сорс код на C# се използва т. нар. кодова двойка и символът се изписва като последователност от две шестнай­сетични числа – "\uD834\uDD61".

Употребата на кодови двойки е необходима при символи, чиито Unicode номера не могат да бъдат кодирани само с 16 бита. Обърнете внимание, че Unicode поддържа над 500 000 символа, а в 16 бита могат да се запи­шат само 65536 различни стойности.

Кодови двойки


За да получим кодовата двойка, съответстваща на даден символ, трябва от шестнайсетичния му Unicode номер да извадим 0x10000, след което да преобразуваме получената стойност в двоично число и да я разделим на две части – водещите 6 бита и останалите 10 бита. Първите 6 бита, отново превръщаме в шестнайсетично число и към тях прибавяме специалния Unicode номер U+D800. Подобна е процедурата и с вторите 10 бита, но там прибавяме U+DC00. Извършването на тази операция върху символа нота шестнайсетина е илюстрирано на следната фигура:

Познавайки тези правила, лесно можем да определим дали дадена шест­найсетична стойност съответства на Unicode номер или е част от кодова двойка, както и да съобразим коя част от кодовата двойка представлява.

Като правило по-често използваните знаци в Unicode стандарта се пред­ставят с една шестнайсетбитова стойност, а останалите – с кодови двойки.

Графични знаци (графеми)


Графеми се наричат всички графични знаци от писмеността на различните езици, използвани в човешката цивилизация – букви, цифри, идеограми, пунктуационни знаци, математически символи и т. н.

Не всички графеми имат свой уникален номер в Unicode стандарта, защото някои графеми могат да се представят като комбинация от няколко други. Това е направено с цел да се намали общият брой на Unicode символите.

Например графемата А се представя с Unicode номер U+0041, но (А с точка отдолу) се представя с последователността U+0041, U+0323 от Unicode номера. Това се дължи на факта, че в Unicode има някои символи, които не представляват само­стоятелни знаци, а допълват други символи. Такива са например ударе­нията, горната подчер­таваща чертичка, долната подчертаваща чертичка и др.

По-нататък, в секцията "Кодиращи схеми", ще разгледаме подробно коди­ращите схеми, поддържани в .NET Framework, както и по какъв начин се представя текстовата информацията в паметта.





Сподели с приятели:
1   ...   57   58   59   60   61   62   63   64   ...   73




©obuch.info 2024
отнасят до администрацията

    Начална страница