рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдХрд┐ рдпреВрдЯреАрдПрдл -8 рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпреВрдирд┐рдХреЛрдб рдХреНрдпрд╛ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╡реАрдмреАрдПрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдпреВрдЯреАрдПрдл -8 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИред рдФрд░ рдЬрдм рд╕реЗ рдореБрдЭреЗ рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдорд┐рд▓рд╛, рдореБрдЭреЗ рдЦреБрдж рдХреЛ рдмрдВрджреВрдХ рдкрд░ рд░рдЦрдирд╛ рдкрдбрд╝рд╛ред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЕрдиреБрднрд╡ рд╡реИрд╕реЗ рднреА рдЙрдкрдпреЛрдЧреА рд╣реИред рдПрдХ рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реВрдБрдЧрд╛ред
рдпреВрдирд┐рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдпреВрдирд┐рдХреЛрдб рд╕реЗ рдкрд╣рд▓реЗ, 8-рдмрд┐рдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдореБрдЦреНрдп рдиреБрдХрд╕рд╛рди рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ:
- рдХреЗрд╡рд▓ 255 рд╡рд░реНрдг, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рднреА рдЧреНрд░рд╛рдлрд┐рдХ рдирд╣реАрдВ рд╣реИрдВ;
- рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛;
- рдкреНрд░рддреНрдпреЗрдХ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдлрд╝реЙрдиреНрдЯ рдмрдирд╛рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рд▓рд┐рдП "рд╡реНрдпрд╛рдкрдХ" рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдПрдХ рдПрдХрд▓ рдорд╛рдирдХ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рд╡рд░реНрдг рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ (рдФрд░ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╡реЗ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдгреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рд╡рд┐рджреЗрд╢реА рд▓реЛрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛)ред рдпреВрдирд┐рдХреЛрдб рдореЗрдВ 1,112,064 рдХреЛрдб рдкреЛрдЬреАрд╢рди (16 рд╕реЗ рдЕрдзрд┐рдХ рдмрд┐рдЯреНрд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢реБрд░реБрдЖрдд ASCII рдХреА рдирдХрд▓ рдХрд░рддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рд╢реЗрд╖ рд▓реИрдЯрд┐рди рд╡рд░реНрдгрдорд╛рд▓рд╛, рд╕рд┐рд░рд┐рд▓рд┐рдХ, рдФрд░ рдЕрдиреНрдп рдпреВрд░реЛрдкреАрдп рдФрд░ рдПрд╢рд┐рдпрд╛рдИ рд╡рд░реНрдгреЛрдВ рдХреАред рдЪрд░рд┐рддреНрд░ рдкрджрдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ 65 k рдХреЗ рд▓рд┐рдП "U + xxxx" рдлреЙрд░реНрдо рдХреЗ рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдиреЛрдЯреЗрд╢рди рдФрд░ рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрдВрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
UTF-8 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдПрдХ рдмрд╛рд░ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпреВрдирд┐рдХреЛрдб рд╣реИ, рд▓реЗрдХрд┐рди рдпреВрдЯреАрдПрдл -8 рд╣реИред рдмрд╛рдж рдореЗрдВ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореИрдВ рдЧрд▓рдд рдерд╛ред
UTF-8 рдпреВрдирд┐рдХреЛрдб рдХрд╛ рдХреЗрд╡рд▓ 8-рдмрд┐рдЯ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред 128 рд╕реЗ рдХрдо рдХреЛрдб рд╡рд╛рд▓реЗ рд╡рд░реНрдгреЛрдВ рдХреЛ рдПрдХ рдмрд╛рдЗрдЯ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рдпреВрдирд┐рдХреЛрдб рдореЗрдВ рд╡реЗ ASCII рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЗрди рдЕрдХреНрд╖рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдкрд╛рда ASCII рдореЗрдВ рдкрд╛рда рд╣реЛрдВрдЧреЗред 128 рдХреЗ рдХреЛрдб рд╡рд╛рд▓реЗ рдкреНрд░рддреАрдХреЛрдВ рдХреЛ 2 рдмрд╛рдЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 2048 - 3 рдХреЗ рдХреЛрдб 65536 - 4 рдХреЗ рдХреЛрдб рд╣реИрдВред рдЗрд╕рд▓рд┐рдП 6 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рд╕рд╛рде рд╕рд╛рдВрдХреЗрддрд┐рдХ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдмрджрд▓рдирд╛ рдХреБрдЫ рднреА рдирд╣реАрдВред
0x00000000 - 0x0000007F: 0xxxxxxx
0x00000080 - 0x000007FF: 110xxxxx 10xxxxxx
0x00000800 - 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
0x00010000 - 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
UTF-8 рдореЗрдВ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:
- рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рд┐рддреНрд░ рдХреЛ рдпреВрдирд┐рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
- рджреЗрдЦреЗрдВ рдХрд┐ рдХреМрди рд╕реА рд╡рд░реНрдг рд╕реАрдорд╛ рд╣реИред
- рдпрджрд┐ рд╡рд░реНрдг рдХреЛрдб 128 рд╕реЗ рдХрдо рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
- рдпрджрд┐ рд╡рд░реНрдг рдХреЛрдб 2048 рд╕реЗ рдХрдо рд╣реИ, рддреЛ рд╣рдо рдЕрдВрддрд┐рдо 6 рдмрд┐рдЯреНрд╕ рдФрд░ рд╡рд░реНрдг рдХреЛрдб рдХреЗ рдкрд╣рд▓реЗ 5 рдмрд┐рдЯреНрд╕ рд▓реЗрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ 5 рдмрд┐рдЯреНрд╕ рдореЗрдВ 0xC0 рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдкрд╣рд▓рд╛ рдмрд╛рдЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдФрд░ рдЕрдВрддрд┐рдо 6 рдмрд┐рдЯреНрд╕ рдореЗрдВ 0x80 рдЬреЛрдбрд╝реЗрдВ рдФрд░ рджреВрд╕рд░рд╛ рдмрд╛рдЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдЬреЛрдбрд╝рдирд╛ред
- рдЗрд╕реА рддрд░рд╣, рд╣рдо рдмрдбрд╝реЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпреВ + рдПрдлрдПрдлрдПрдлрдПрдл рдХреЗ рдмрд╛рд╣рд░ рдХреЗ рдПрдХ рдЪрд░рд┐рддреНрд░ рдХреЛ рдпреВрдЯреАрдПрдл -16 рд╕рд░реЛрдЧреЗрдЯреНрд╕ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред
Function EncodeUTF8(s) Dim i, c, utfc, b1, b2, b3 For i=1 to Len(s) c = ToLong(AscW(Mid(s,i,1))) If c < 128 Then utfc = chr( c) ElseIf c < 2048 Then b1 = c Mod &h40 b2 = (c - b1) / &h40 utfc = chr(&hC0 + b2) & chr(&h80 + b1) ElseIf c < 65536 And (c < 55296 Or c > 57343) Then b1 = c Mod &h40 b2 = ((c - b1) / &h40) Mod &h40 b3 = (c - b1 - (&h40 * b2)) / &h1000 utfc = chr(&hE0 + b3) & chr(&h80 + b2) & chr(&h80 + b1) Else ' UTF-16 utfc = Chr(&hEF) & Chr(&hBF) & Chr(&hBD) End If EncodeUTF8 = EncodeUTF8 + utfc Next End Function Function ToLong(intVal) If intVal < 0 Then ToLong = CLng(intVal) + &H10000 Else ToLong = CLng(intVal) End If End Function
рдпреВрдЯреАрдПрдл -8 рдХреЛ рдбрд┐рдХреЛрдб рдХрд░реЗрдВ
- рд╣рдо рдлреЙрд░реНрдо 11xxxxxx рдХреЗ рдкрд╣рд▓реЗ рдЪрд░рд┐рддреНрд░ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
- рд╣рдордиреЗ рдлреЙрд░реНрдо 10xxxxxx рдХреЗ рдмрд╛рдж рдХреЗ рд╕рднреА рдмрд╛рдЗрдЯреНрд╕ рдкрдврд╝реЗ
- рдпрджрд┐ рджреЛ рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдХреНрд░рдо рдФрд░ рдлреЙрд░реНрдо рдХрд╛ рдкрд╣рд▓рд╛ рдмрд╛рдЗрдЯ 110xxxxx рд╣реИ, рддреЛ рд╣рдо рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХреЛ рдХрд╛рдЯрддреЗ рд╣реИрдВ рдФрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рдмрд╛рдЗрдЯ рдХреЛ 0x40 рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВред
- рдЗрд╕реА рддрд░рд╣ рд▓рдВрдмреЗ рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдПред
- рдкреВрд░реЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдпреВрдирд┐рдХреЛрдб рд╡рд░реНрдг рд╕реЗ рдмрджрд▓реЗрдВред
Function DecodeUTF8(s) Dim i, c, n, b1, b2, b3 i = 1 Do While i <= len(s) c = asc(mid(s,i,1)) If (c and &hC0) = &hC0 Then n = 1 Do While i + n <= len(s) If (asc(mid(s,i+n,1)) and &hC0) <> &h80 Then Exit Do End If n = n + 1 Loop If n = 2 and ((c and &hE0) = &hC0) Then b1 = asc(mid(s,i+1,1)) and &h3F b2 = c and &h1F c = b1 + b2 * &h40 Elseif n = 3 and ((c and &hF0) = &hE0) Then b1 = asc(mid(s,i+2,1)) and &h3F b2 = asc(mid(s,i+1,1)) and &h3F b3 = c and &h0F c = b3 * &H1000 + b2 * &H40 + b1 Else ' U+FFFF c = &hFFFD End if s = left(s,i-1) + chrw( c) + mid(s,i+n) Elseif (c and &hC0) = &h80 then ' s = left(s,i-1) + chrw(&hFFFD) + mid(s,i+1) End If i = i + 1 Loop DecodeUTF8 = s End Function
рд╕рдВрджрд░реНрдн
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рдпреВрдирд┐рдХреЛрдбASP + VBScript рдХрд╛ рд╕реНрд░реЛрддUPD : рддреНрд░реБрдЯрд┐ рдЕрдиреБрдХреНрд░рдо рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдФрд░ рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдкреВрд░реНрдгрд╛рдВрдХ, рдЬреЛ AscW рджреЗрддрд╛ рд╣реИред