@@ -230,7 +230,7 @@ private static void InitPyMembers()
230230 ( ) => PyStringType = IntPtr . Zero ) ;
231231 XDecref ( op ) ;
232232
233- op = PyUnicode_FromString ( "unicode" ) ;
233+ op = PyString_FromString ( "unicode" ) ;
234234 SetPyMemberTypeOf ( ref PyUnicodeType , op ,
235235 ( ) => PyUnicodeType = IntPtr . Zero ) ;
236236 XDecref ( op ) ;
@@ -1529,7 +1529,12 @@ internal static bool PyString_Check(IntPtr ob)
15291529 internal static IntPtr PyString_FromString ( string value )
15301530 {
15311531 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 ( ) ;
15331538 }
15341539
15351540
@@ -1555,16 +1560,6 @@ internal static long PyBytes_Size(IntPtr op)
15551560
15561561 private static IntPtr _PyBytes_Size ( IntPtr op ) => Delegates . _PyBytes_Size ( op ) ;
15571562
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-
15681563 internal static IntPtr PyUnicode_AsUTF8 ( IntPtr unicode ) => Delegates . PyUnicode_AsUTF8 ( unicode ) ;
15691564
15701565 internal static bool PyUnicode_Check ( IntPtr ob )
@@ -1578,22 +1573,6 @@ internal static bool PyUnicode_Check(IntPtr ob)
15781573
15791574 internal static IntPtr PyUnicode_FromEncodedObject ( IntPtr ob , IntPtr enc , IntPtr err ) => Delegates . PyUnicode_FromEncodedObject ( ob , enc , err ) ;
15801575
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 . PyUnicode_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-
15971576 internal static int PyUnicode_GetMax ( ) => Delegates . PyUnicode_GetMax ( ) ;
15981577
15991578 internal static long PyUnicode_GetSize ( IntPtr ob )
@@ -1612,12 +1591,6 @@ internal static long PyUnicode_GetSize(IntPtr ob)
16121591
16131592 internal static IntPtr PyUnicode_FromOrdinal ( int c ) => Delegates . PyUnicode_FromOrdinal ( c ) ;
16141593
1615- internal static IntPtr PyUnicode_FromString ( string s )
1616- {
1617- return PyUnicode_FromUnicode ( s , s . Length ) ;
1618- }
1619-
1620-
16211594 internal static IntPtr PyUnicode_InternFromString ( string s )
16221595 {
16231596 using var ptr = new StrPtr ( s , Encoding . UTF8 ) ;
@@ -1648,11 +1621,12 @@ internal static string GetManagedString(IntPtr op)
16481621 if ( type == PyUnicodeType )
16491622 {
16501623 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 ) ;
16531627 return new string ( codePoints ,
16541628 startIndex : 1 , // skip BOM
1655- length : length ) ;
1629+ length : bytesLength / 2 - 1 ) ; // utf16 - BOM
16561630 }
16571631
16581632 return null ;
@@ -2465,11 +2439,10 @@ static Delegates()
24652439 PyBytes_AsString = ( delegate * unmanaged[ Cdecl] < BorrowedReference , IntPtr > ) GetFunctionByName ( nameof ( PyBytes_AsString ) , GetUnmanagedDll ( _PythonDll ) ) ;
24662440 PyBytes_FromString = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyBytes_FromString ) , GetUnmanagedDll ( _PythonDll ) ) ;
24672441 _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 ) ) ;
24692442 PyUnicode_AsUTF8 = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_AsUTF8 ) , GetUnmanagedDll ( _PythonDll ) ) ;
24702443 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 ) ) ;
24712445 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 ) ) ;
24732446 PyUnicode_GetMax = ( delegate * unmanaged[ Cdecl] < int > ) GetFunctionByName ( nameof ( PyUnicode_GetMax ) , GetUnmanagedDll ( _PythonDll ) ) ;
24742447 _PyUnicode_GetSize = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( "PyUnicode_GetSize" , GetUnmanagedDll ( _PythonDll ) ) ;
24752448 PyUnicode_AsUnicode = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyUnicode_AsUnicode ) , GetUnmanagedDll ( _PythonDll ) ) ;
@@ -2762,11 +2735,10 @@ static Delegates()
27622735 internal static delegate * unmanaged[ Cdecl] < BorrowedReference , IntPtr > PyBytes_AsString { get ; }
27632736 internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > PyBytes_FromString { get ; }
27642737 internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > _PyBytes_Size { get ; }
2765- internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr > PyUnicode_FromStringAndSize { get ; }
27662738 internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > PyUnicode_AsUTF8 { get ; }
27672739 internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > PyUnicode_FromObject { get ; }
27682740 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 ; }
27702742 internal static delegate * unmanaged[ Cdecl] < int > PyUnicode_GetMax { get ; }
27712743 internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > _PyUnicode_GetSize { get ; }
27722744 internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > PyUnicode_AsUnicode { get ; }
0 commit comments