@@ -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 ) ;
@@ -1527,7 +1527,12 @@ internal static bool PyString_Check(IntPtr ob)
1527
1527
internal static IntPtr PyString_FromString ( string value )
1528
1528
{
1529
1529
fixed( char * ptr = value )
1530
- return PyUnicode_FromKindAndData ( 2 , ( IntPtr ) ptr , value . Length ) ;
1530
+ return Delegates . PyUnicode_DecodeUTF16 (
1531
+ ( IntPtr ) ptr ,
1532
+ value . Length * sizeof ( Char ) ,
1533
+ IntPtr . Zero ,
1534
+ IntPtr . Zero
1535
+ ) . DangerousMoveToPointerOrNull ( ) ;
1531
1536
}
1532
1537
1533
1538
@@ -1553,16 +1558,6 @@ internal static long PyBytes_Size(IntPtr op)
1553
1558
1554
1559
private static IntPtr _PyBytes_Size ( IntPtr op ) => Delegates . _PyBytes_Size ( op ) ;
1555
1560
1556
-
1557
- internal static IntPtr PyUnicode_FromStringAndSize ( IntPtr value , long size )
1558
- {
1559
- return PyUnicode_FromStringAndSize ( value , new IntPtr ( size ) ) ;
1560
- }
1561
-
1562
-
1563
- private static IntPtr PyUnicode_FromStringAndSize ( IntPtr value , IntPtr size ) => Delegates . PyUnicode_FromStringAndSize ( value , size ) ;
1564
-
1565
-
1566
1561
internal static IntPtr PyUnicode_AsUTF8 ( IntPtr unicode ) => Delegates . PyUnicode_AsUTF8 ( unicode ) ;
1567
1562
1568
1563
internal static bool PyUnicode_Check ( IntPtr ob )
@@ -1576,22 +1571,6 @@ internal static bool PyUnicode_Check(IntPtr ob)
1576
1571
1577
1572
internal static IntPtr PyUnicode_FromEncodedObject ( IntPtr ob , IntPtr enc , IntPtr err ) => Delegates . PyUnicode_FromEncodedObject ( ob , enc , err ) ;
1578
1573
1579
- internal static IntPtr PyUnicode_FromKindAndData ( int kind , IntPtr s , long size )
1580
- {
1581
- return PyUnicode_FromKindAndData ( kind , s , new IntPtr ( size ) ) ;
1582
- }
1583
-
1584
-
1585
- private static IntPtr PyUnicode_FromKindAndData ( int kind , IntPtr s , IntPtr size )
1586
- => Delegates . PyUnicode_FromKindAndData ( kind , s , size ) ;
1587
-
1588
- internal static IntPtr PyUnicode_FromUnicode ( string s , long size )
1589
- {
1590
- fixed( char * ptr = s )
1591
- return PyUnicode_FromKindAndData ( 2 , ( IntPtr ) ptr , size ) ;
1592
- }
1593
-
1594
-
1595
1574
internal static int PyUnicode_GetMax ( ) => Delegates . PyUnicode_GetMax ( ) ;
1596
1575
1597
1576
internal static long PyUnicode_GetSize ( IntPtr ob )
@@ -1610,12 +1589,6 @@ internal static long PyUnicode_GetSize(IntPtr ob)
1610
1589
1611
1590
internal static IntPtr PyUnicode_FromOrdinal ( int c ) => Delegates . PyUnicode_FromOrdinal ( c ) ;
1612
1591
1613
- internal static IntPtr PyUnicode_FromString ( string s )
1614
- {
1615
- return PyUnicode_FromUnicode ( s , s . Length ) ;
1616
- }
1617
-
1618
-
1619
1592
internal static IntPtr PyUnicode_InternFromString ( string s )
1620
1593
{
1621
1594
using var ptr = new StrPtr ( s , Encoding . UTF8 ) ;
@@ -1646,11 +1619,12 @@ internal static string GetManagedString(IntPtr op)
1646
1619
if ( type == PyUnicodeType )
1647
1620
{
1648
1621
using var p = PyUnicode_AsUTF16String ( new BorrowedReference ( op ) ) ;
1649
- int length = ( int ) PyUnicode_GetSize ( op ) ;
1650
- char * codePoints = ( char * ) PyBytes_AsString ( p . DangerousGetAddress ( ) ) ;
1622
+ var bytesPtr = p . DangerousGetAddress ( ) ;
1623
+ int bytesLength = ( int ) Runtime . PyBytes_Size ( bytesPtr ) ;
1624
+ char * codePoints = ( char * ) PyBytes_AsString ( bytesPtr ) ;
1651
1625
return new string ( codePoints ,
1652
1626
startIndex : 1 , // skip BOM
1653
- length : length ) ;
1627
+ length : bytesLength / 2 - 1 ) ; // utf16 - BOM
1654
1628
}
1655
1629
1656
1630
return null ;
@@ -2442,11 +2416,10 @@ static Delegates()
2442
2416
PyBytes_AsString = ( delegate * unmanaged[ Cdecl] < BorrowedReference , IntPtr > ) GetFunctionByName ( nameof ( PyBytes_AsString ) , GetUnmanagedDll ( _PythonDll ) ) ;
2443
2417
PyBytes_FromString = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyBytes_FromString ) , GetUnmanagedDll ( _PythonDll ) ) ;
2444
2418
_PyBytes_Size = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( "PyBytes_Size" , GetUnmanagedDll ( _PythonDll ) ) ;
2445
- PyUnicode_FromStringAndSize = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_FromStringAndSize ) , GetUnmanagedDll ( _PythonDll ) ) ;
2446
2419
PyUnicode_AsUTF8 = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_AsUTF8 ) , GetUnmanagedDll ( _PythonDll ) ) ;
2447
2420
PyUnicode_FromObject = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_FromObject ) , GetUnmanagedDll ( _PythonDll ) ) ;
2421
+ PyUnicode_DecodeUTF16 = ( delegate * unmanaged[ Cdecl] < IntPtr , nint , IntPtr , IntPtr , NewReference > ) GetFunctionByName ( nameof ( PyUnicode_DecodeUTF16 ) , GetUnmanagedDll ( _PythonDll ) ) ;
2448
2422
PyUnicode_FromEncodedObject = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_FromEncodedObject ) , GetUnmanagedDll ( _PythonDll ) ) ;
2449
- PyUnicode_FromKindAndData = ( delegate * unmanaged[ Cdecl] < int , IntPtr , IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_FromKindAndData ) , GetUnmanagedDll ( _PythonDll ) ) ;
2450
2423
PyUnicode_GetMax = ( delegate * unmanaged[ Cdecl] < int > ) GetFunctionByName ( nameof ( PyUnicode_GetMax ) , GetUnmanagedDll ( _PythonDll ) ) ;
2451
2424
_PyUnicode_GetSize = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( "PyUnicode_GetSize" , GetUnmanagedDll ( _PythonDll ) ) ;
2452
2425
PyUnicode_AsUnicode = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_AsUnicode ) , GetUnmanagedDll ( _PythonDll ) ) ;
@@ -2738,11 +2711,10 @@ static Delegates()
2738
2711
internal static delegate * unmanaged[ Cdecl] < BorrowedReference , IntPtr > PyBytes_AsString { get ; }
2739
2712
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > PyBytes_FromString { get ; }
2740
2713
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > _PyBytes_Size { get ; }
2741
- internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr > PyUnicode_FromStringAndSize { get ; }
2742
2714
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > PyUnicode_AsUTF8 { get ; }
2743
2715
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > PyUnicode_FromObject { get ; }
2744
2716
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , IntPtr > PyUnicode_FromEncodedObject { get ; }
2745
- internal static delegate * unmanaged[ Cdecl] < int , IntPtr , IntPtr , IntPtr > PyUnicode_FromKindAndData { get ; }
2717
+ internal static delegate * unmanaged[ Cdecl] < IntPtr , nint , IntPtr , IntPtr , NewReference > PyUnicode_DecodeUTF16 { get ; }
2746
2718
internal static delegate * unmanaged[ Cdecl] < int > PyUnicode_GetMax { get ; }
2747
2719
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > _PyUnicode_GetSize { get ; }
2748
2720
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > PyUnicode_AsUnicode { get ; }
0 commit comments