@@ -5074,6 +5074,7 @@ procedure TTestCoreBase._UTF8;
5074
5074
Unic: RawByteString;
5075
5075
WA, HasValidUtf8Avx2: Boolean;
5076
5076
rb1, rb2, rb3: RawByteString;
5077
+ eng: TSynAnsiConvert;
5077
5078
const
5078
5079
ROWIDS: array [0 ..17 ] of PUtf8Char = (' id' , ' ID' , ' iD' , ' rowid' , ' ROWid' ,
5079
5080
' ROWID' , ' rowiD' , ' ROWId' , // ok
@@ -5920,25 +5921,29 @@ procedure TTestCoreBase._UTF8;
5920
5921
FastSetString(U, @CHINESE_TEXT, 9 );
5921
5922
CheckEqual(StrLen(pointer(U)), 9 );
5922
5923
SU := Utf8ToSynUnicode(U);
5923
- rb1 := TSynAnsiConvert.Engine(936 ).UnicodeStringToAnsi(SU); // GB2312
5924
+ eng := TSynAnsiConvert.Engine(936 );
5925
+ Check(eng <> nil , ' Engine(936)' );
5926
+ rb1 := eng.UnicodeStringToAnsi(SU); // GB2312
5924
5927
CheckEqual(length(rb1), 7 , ' cp936a' );
5925
- SU2 := TSynAnsiConvert.Engine( 936 ) .AnsiToUnicodeString(rb1);
5928
+ SU2 := eng .AnsiToUnicodeString(rb1);
5926
5929
Check(SU = SU2);
5927
5930
rb1 := ' ' ;
5928
- rb1 := TSynAnsiConvert.Engine( 936 ) .Utf8ToAnsi(U);
5931
+ rb1 := eng .Utf8ToAnsi(U);
5929
5932
CheckEqual(length(rb1), 7 );
5930
- U2 := TSynAnsiConvert.Engine( 936 ) .AnsiToUtf8(rb1);
5933
+ U2 := eng .AnsiToUtf8(rb1);
5931
5934
CheckEqual(U, U2);
5932
- rb1 := TSynAnsiConvert.Engine(54936 ).UnicodeStringToAnsi(SU); // GB18030
5935
+ eng := TSynAnsiConvert.Engine(54936 );
5936
+ Check(eng <> nil , ' Engine(54936)' );
5937
+ rb1 := eng.UnicodeStringToAnsi(SU); // GB18030
5933
5938
if rb1 <> ' ' then // some Windows versions won't support this code page
5934
5939
begin
5935
5940
CheckEqual(length(rb1), 7 , ' cp54936a' );
5936
- SU2 := TSynAnsiConvert.Engine( 54936 ) .AnsiToUnicodeString(rb1);
5941
+ SU2 := eng .AnsiToUnicodeString(rb1);
5937
5942
Check(SU = SU2, ' cp54936b' );
5938
5943
rb1 := ' ' ;
5939
- rb1 := TSynAnsiConvert.Engine( 54936 ) .Utf8ToAnsi(U);
5944
+ rb1 := eng .Utf8ToAnsi(U);
5940
5945
CheckEqual(length(rb1), 7 , ' cp54936c' );
5941
- U2 := TSynAnsiConvert.Engine( 54936 ) .AnsiToUtf8(rb1);
5946
+ U2 := eng .AnsiToUtf8(rb1);
5942
5947
CheckEqual(U, U2, ' cp54936d' );
5943
5948
{ $ifdef HASCODEPAGE}
5944
5949
rb2 := U;
@@ -5950,6 +5955,16 @@ procedure TTestCoreBase._UTF8;
5950
5955
Check(rb1 = rb2, ' setcodepage' );
5951
5956
Check(SortDynArrayRawByteString(rb1, rb2) = 0 );
5952
5957
{ $endif HASCODEPAGE}
5958
+ SetLength(U, 4 );
5959
+ PCardinal(U)^ := $A59AAAF0; // valid in GB18030 only
5960
+ SU := Utf8ToSynUnicode(U); // 69 D8 A5 DE , UTF16, Code Point: \uD869\uDEA5
5961
+ CheckEqual(PCardinal(SU)^, $DEA5D869);
5962
+ RB1 := eng.Utf8ToAnsi(U);
5963
+ Check((RB1 <> ' ' ) and (PCardinal(RB1)^ = $37EE3598), ' Utf8ToAnsi' );
5964
+ RB2 := eng.UnicodeStringToAnsi(SU);
5965
+ CheckEqual(RB1, RB2, ' RB1=RB2' );
5966
+ U2 := eng.AnsiToUtf8(RB1);
5967
+ CheckEqual(U2, U, ' AnsiToUtf8' );
5953
5968
end ;
5954
5969
Check(UnQuoteSqlStringVar(' "one two"' , U) <> nil );
5955
5970
Check(U = ' one two' );
0 commit comments