Необходими знания -
Базови познания за общата система от типове в .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, както и по какъв начин се представя текстовата информацията в паметта.
Сподели с приятели: |