@@ -230,7 +230,7 @@ private static void InitPyMembers()
230
230
( ) => PyStringType = IntPtr . Zero ) ;
231
231
XDecref ( op ) ;
232
232
233
- op = PyUnicode_FromString ( "unicode" ) ;
233
+ op = PyString_FromString ( "unicode" ) ;
234
234
SetPyMemberTypeOf ( ref PyUnicodeType , op ,
235
235
( ) => PyUnicodeType = IntPtr . Zero ) ;
236
236
XDecref ( op ) ;
@@ -1529,7 +1529,12 @@ internal static bool PyString_Check(IntPtr ob)
1529
1529
internal static IntPtr PyString_FromString ( string value )
1530
1530
{
1531
1531
fixed( char * ptr = value )
1532
- return PyUnicode_FromKindAndData ( 2 , ( IntPtr ) ptr , value . Length ) ;
1532
+ return Delegates . PyUnicode_DecodeUTF16 (
1533
+ ( IntPtr ) ptr ,
1534
+ value . Length * sizeof ( Char ) ,
1535
+ IntPtr . Zero ,
1536
+ IntPtr . Zero
1537
+ ) . DangerousMoveToPointerOrNull ( ) ;
1533
1538
}
1534
1539
1535
1540
@@ -1555,16 +1560,6 @@ internal static long PyBytes_Size(IntPtr op)
1555
1560
1556
1561
private static IntPtr _PyBytes_Size ( IntPtr op ) => Delegates . _PyBytes_Size ( op ) ;
1557
1562
1558
-
1559
- internal static IntPtr PyUnicode_FromStringAndSize ( IntPtr value , long size )
1560
- {
1561
- return PyUnicode_FromStringAndSize ( value , new IntPtr ( size ) ) ;
1562
- }
1563
-
1564
-
1565
- private static IntPtr PyUnicode_FromStringAndSize ( IntPtr value , IntPtr size ) => Delegates . PyUnicode_FromStringAndSize ( value , size ) ;
1566
-
1567
-
1568
1563
internal static IntPtr PyUnicode_AsUTF8 ( IntPtr unicode ) => Delegates . PyUnicode_AsUTF8 ( unicode ) ;
1569
1564
1570
1565
internal static bool PyUnicode_Check ( IntPtr ob )
@@ -1578,22 +1573,6 @@ internal static bool PyUnicode_Check(IntPtr ob)
1578
1573
1579
1574
internal static IntPtr PyUnicode_FromEncodedObject ( IntPtr ob , IntPtr enc , IntPtr err ) => Delegates . PyUnicode_FromEncodedObject ( ob , enc , err ) ;
1580
1575
1581
- internal static IntPtr PyUnicode_FromKindAndData ( int kind , IntPtr s , long size )
1582
- {
1583
- return PyUnicode_FromKindAndData ( kind , s , new IntPtr ( size ) ) ;
1584
- }
1585
-
1586
-
1587
- private static IntPtr PyUnicode_FromKindAndData ( int kind , IntPtr s , IntPtr size )
1588
- => Delegates . PyUnico
1241
de_FromKindAndData ( kind , s , size ) ;
1589
-
1590
- internal static IntPtr PyUnicode_FromUnicode ( string s , long size )
1591
- {
1592
- fixed( char * ptr = s )
1593
- return PyUnicode_FromKindAndData ( 2 , ( IntPtr ) ptr , size ) ;
1594
- }
1595
-
1596
-
1597
1576
internal static int PyUnicode_GetMax ( ) => Delegates . PyUnicode_GetMax ( ) ;
1598
1577
1599
1578
internal static long PyUnicode_GetSize ( IntPtr ob )
@@ -1612,12 +1591,6 @@ internal static long PyUnicode_GetSize(IntPtr ob)
1612
1591
1613
1592
internal static IntPtr PyUnicode_FromOrdinal ( int c ) => Delegates . PyUnicode_FromOrdinal ( c ) ;
1614
1593
1615
- internal static IntPtr PyUnicode_FromString ( string s )
1616
- {
1617
- return PyUnicode_FromUnicode ( s , s . Length ) ;
1618
- }
1619
-
1620
-
1621
1594
internal static IntPtr PyUnicode_InternFromString ( string s )
1622
1595
{
1623
1596
using var ptr = new StrPtr ( s , Encoding . UTF8 ) ;
@@ -1648,11 +1621,12 @@ internal static string GetManagedString(IntPtr op)
1648
1621
if ( type == PyUnicodeType )
1649
1622
{
1650
1623
using var p = PyUnicode_AsUTF16String ( new BorrowedReference ( op ) ) ;
1651
- int length = ( int ) PyUnicode_GetSize ( op ) ;
1652
- char * codePoints = ( char * ) PyBytes_AsString ( p . DangerousGetAddress ( ) ) ;
1624
+ var bytesPtr = p . DangerousGetAddress ( ) ;
1625
+ int bytesLength = ( int ) Runtime . PyBytes_Size ( bytesPtr ) ;
1626
+ char * codePoints = ( char * ) PyBytes_AsString ( bytesPtr ) ;
1653
1627
return new string ( codePoints ,
1654
1628
startIndex : 1 , // skip BOM
1655
- length : length ) ;
1629
+ length : bytesLength / 2 - 1 ) ; // utf16 - BOM
1656
1630
}
1657
1631
1658
1632
return null ;
@@ -2465,11 +2439,10 @@ static Delegates()
2465
2439
PyBytes_AsString = ( delegate * unmanaged[ Cdecl] < BorrowedReference , IntPtr > ) GetFunctionByName ( nameof ( PyBytes_AsString ) , GetUnmanagedDll ( _PythonDll ) ) ;
2466
2440
PyBytes_FromString = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyBytes_FromString ) , GetUnmanagedDll ( _PythonDll ) ) ;
2467
2441
_PyBytes_Size = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( "PyBytes_Size" , GetUnmanagedDll ( _PythonDll ) ) ;
2468
- PyUnicode_FromStringAndSize = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_FromStringAndSize ) , GetUnmanagedDll ( _PythonDll ) ) ;
2469
2442
PyUnicode_AsUTF8 = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_AsUTF8 ) , GetUnmanagedDll ( _PythonDll ) ) ;
2470
2443
PyUnicode_FromObject = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_FromObject ) , GetUnmanagedDll ( _PythonDll ) ) ;
2444
+ PyUnicode_DecodeUTF16 = ( delegate * unmanaged[ Cdecl] < IntPtr , nint , IntPtr , IntPtr , NewReference > ) GetFunctionByName ( nameof ( PyUnicode_DecodeUTF16 ) , GetUnmanagedDll ( _PythonDll ) ) ;
2471
2445
PyUnicode_FromEncodedObject = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_FromEncodedObject ) , GetUnmanagedDll ( _PythonDll ) ) ;
2472
- PyUnicode_FromKindAndData = ( delegate * unmanaged[ Cdecl] < int , IntPtr , IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_FromKindAndData ) , GetUnmanagedDll ( _PythonDll ) ) ;
2473
2446
PyUnicode_GetMax = ( delegate * unmanaged[ Cdecl] < int > ) GetFunctionByName ( nameof ( PyUnicode_GetMax ) , GetUnmanagedDll ( _PythonDll ) ) ;
2474
2447
_PyUnicode_GetSize = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( "PyUnicode_GetSize" , GetUnmanagedDll ( _PythonDll ) ) ;
2475
2448
PyUnicode_AsUnicode = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_AsUnicode ) , GetUnmanagedDll ( _PythonDll ) ) ;
@@ -2762,11 +2735,10 @@ static Delegates()
2762
2735
internal static delegate * unmanaged[ Cdecl] < BorrowedReference , IntPtr > PyBytes_AsString { get ; }
2763
2736
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > PyBytes_FromString { get ; }
2764
2737
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > _PyBytes_Size { get ; }
2765
- internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr > PyUnicode_FromStringAndSize { get ; }
2766
2738
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > PyUnicode_AsUTF8 { get ; }
2767
2739
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > PyUnicode_FromObject { get ; }
2768
2740
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , IntPtr > PyUnicode_FromEncodedObject { get ; }
2769
- internal static delegate * unmanaged[ Cdecl] < int , IntPtr , IntPtr , IntPtr > PyUnicode_FromKindAndData { get ; }
2741
+ internal static delegate * unmanaged[ Cdecl] < IntPtr , nint , IntPtr , IntPtr , NewReference > PyUnicode_DecodeUTF16 { get ; }
2770
2742
internal static delegate * unmanaged[ Cdecl] < int > PyUnicode_GetMax { get ; }
2771
2743
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > _PyUnicode_GetSize { get ; }
2772
2744
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > PyUnicode_AsUnicode { get ; }
0 commit comments