Code: Select all
Char.q = $81949FF0
s.s=PeekS(@Char, 1, #PB_UTF8)
ShowMemoryViewer(@s, 8)
Debug s
Debug Asc(s)
Debug Chr(Asc(s))
Code: Select all
Char.q = $81949FF0
s.s=PeekS(@Char, 1, #PB_UTF8)
ShowMemoryViewer(@s, 8)
Debug s
Debug Asc(s)
Debug Chr(Asc(s))Code: Select all
EnableExplicit
Structure CHU
ch_utf.a[4]
EndStructure
Define ccc.CHU
ccc\ch_utf[0] = $F0
ccc\ch_utf[1] = $9F
ccc\ch_utf[2] = $94
ccc\ch_utf[3] = $81
ShowMemoryViewer(@ccc, 4)
Define sss.s = PeekS(@ccc, 1, #PB_UTF8)
Debug sss
Debug Len(sss) ;!!!!!!! 1 --> 2 ch
Debug StringByteLength(sss) ;!!!!!! 4 byte
Chr() and Asc() don't support this.
Code: Select all
Procedure.l NewAsc(s.s)
Protected r = Asc(s)
If r>=$D800 And r<=$DFFF
r | ((Asc(PeekS(@s+2, 1))&$FFFF)<<16)
EndIf
ProcedureReturn r
EndProcedure
Procedure.s NewChr(Char.l)
Protected x, r.s = Chr(Char)
x = Char & $FFFF
If x>=$D800 And x<=$DFFF
r + Chr(Char>>16)
EndIf
ProcedureReturn r
EndProcedure
Char = $81949FF0
s.s=PeekS(@Char, 1, #PB_UTF8)
ShowMemoryViewer(@s, 8)
Debug s
Debug NewChr(NewAsc(s))