Data update
This commit is contained in:
parent
0df55f9f24
commit
aec8ed51b6
1045 changed files with 18889 additions and 2777 deletions
|
|
@ -0,0 +1,106 @@
|
|||
Function unicode_2_utf8(x As Long) As String
|
||||
Dim As String y
|
||||
Dim As Long r
|
||||
Select Case x
|
||||
Case 0 To &H7F
|
||||
y = Chr(x)
|
||||
Case &H80 To &H7FF
|
||||
y = Chr(192 + x \ 64) + Chr(128 + x Mod 64)
|
||||
Case &H800 To &H7FFF, 32768 To 65535
|
||||
r = x \ 64
|
||||
y = Chr(224 + r \ 64) + Chr(128 + r Mod 64) + Chr(128 + x Mod 64)
|
||||
Case &H10000 To &H10FFFF
|
||||
r = x \ 4096
|
||||
y = Chr(240 + r \ 64) + Chr(128 + r Mod 64) + Chr(128 + (x \ 64) Mod 64) + Chr(128 + x Mod 64)
|
||||
Case Else
|
||||
Print "what else? " & x & " " & Hex(x)
|
||||
End Select
|
||||
Return y
|
||||
End Function
|
||||
|
||||
Function utf8_2_unicode(x As String) As Long
|
||||
Dim As Long primero, segundo, tercero, cuarto
|
||||
Dim As Long total
|
||||
Select Case Len(x)
|
||||
Case 1 'one byte
|
||||
If Asc(x) < 128 Then
|
||||
total = Asc(x)
|
||||
Else
|
||||
Print "highest bit set error"
|
||||
End If
|
||||
Case 2 'two bytes and assume primero byte is leading byte
|
||||
If Asc(x) \ 32 = 6 Then
|
||||
primero = Asc(x) Mod 32
|
||||
If Asc(Mid(x, 2, 1)) \ 64 = 2 Then
|
||||
segundo = Asc(Mid(x, 2, 1)) Mod 64
|
||||
Else
|
||||
Print "mask error"
|
||||
End If
|
||||
Else
|
||||
Print "leading byte error"
|
||||
End If
|
||||
total = 64 * primero + segundo
|
||||
Case 3 'three bytes and assume primero byte is leading byte
|
||||
If Asc(x) \ 16 = 14 Then
|
||||
primero = Asc(x) Mod 16
|
||||
If Asc(Mid(x, 2, 1)) \ 64 = 2 Then
|
||||
segundo = Asc(Mid(x, 2, 1)) Mod 64
|
||||
If Asc(Mid(x, 3, 1)) \ 64 = 2 Then
|
||||
tercero = Asc(Mid(x, 3, 1)) Mod 64
|
||||
Else
|
||||
Print "mask error last byte"
|
||||
End If
|
||||
Else
|
||||
Print "mask error middle byte"
|
||||
End If
|
||||
Else
|
||||
Print "leading byte error"
|
||||
End If
|
||||
total = 4096 * primero + 64 * segundo + tercero
|
||||
Case 4 'four bytes and assume primero byte is leading byte
|
||||
If Asc(x) \ 8 = 30 Then
|
||||
primero = Asc(x) Mod 8
|
||||
If Asc(Mid(x, 2, 1)) \ 64 = 2 Then
|
||||
segundo = Asc(Mid(x, 2, 1)) Mod 64
|
||||
If Asc(Mid(x, 3, 1)) \ 64 = 2 Then
|
||||
tercero = Asc(Mid(x, 3, 1)) Mod 64
|
||||
If Asc(Mid(x, 4, 1)) \ 64 = 2 Then
|
||||
cuarto = Asc(Mid(x, 4, 1)) Mod 64
|
||||
Else
|
||||
Print "mask error last byte"
|
||||
End If
|
||||
Else
|
||||
Print "mask error tercero byte"
|
||||
End If
|
||||
Else
|
||||
Print "mask error second byte"
|
||||
End If
|
||||
Else
|
||||
Print "mask error leading byte"
|
||||
End If
|
||||
total = Clng(262144 * primero + 4096 * segundo + 64 * tercero + cuarto)
|
||||
Case Else
|
||||
Print "more bytes than expected"
|
||||
End Select
|
||||
Return total
|
||||
End Function
|
||||
|
||||
Dim As Long cp(4) = {65, 246, 1046, 8364, 119070} '[{&H0041,&H00F6,&H0416,&H20AC,&H1D11E}]
|
||||
Dim As String r, s
|
||||
Dim As integer i, j
|
||||
Print "ch unicode UTF-8 encoded decoded"
|
||||
For i = Lbound(cp) To Ubound(cp)
|
||||
Dim As Long cpi = cp(i)
|
||||
r = unicode_2_utf8(cpi)
|
||||
s = Hex(cpi)
|
||||
Print Chr(cpi); Space(10 - Len(s)); s;
|
||||
s = ""
|
||||
For j = 1 To Len(r)
|
||||
s &= Hex(Asc(Mid(r, j, 1))) & " "
|
||||
Next j
|
||||
Print Space(16 - Len(s)); s;
|
||||
s = Hex(utf8_2_unicode(r))
|
||||
Print Space(8 - Len(s)); s
|
||||
Next i
|
||||
|
||||
Sleep
|
||||
|
|
@ -3,6 +3,6 @@ writeln "character Unicode UTF-8 encoding (hex)"
|
|||
for .cp in "AöЖ€𝄞" {
|
||||
val .utf8 = s2b cp2s .cp
|
||||
val .cpstr = b2s .utf8
|
||||
val .utf8rep = join " ", map f $"\.b:X02;", .utf8
|
||||
val .utf8rep = join " ", map fn(.b) $"\.b:X02;", .utf8
|
||||
writeln $"\.cpstr:-11; U+\.cp:X04:-8; \.utf8rep;"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ const proc: main is func
|
|||
writeln("Character Unicode UTF-8 encoding (hex) Decoded");
|
||||
writeln("-------------------------------------------------");
|
||||
for ch range "AöЖ€𝄞" do
|
||||
utf8 := striToUtf8(str(ch));
|
||||
utf8 := toUtf8(str(ch));
|
||||
writeln(ch rpad 11 <& "U+" <& ord(ch) radix 16 lpad0 4 rpad 7 <&
|
||||
hex(utf8) rpad 22 <& utf8ToStri(utf8));
|
||||
hex(utf8) rpad 22 <& fromUtf8(utf8));
|
||||
end for;
|
||||
end func;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue