Thread overview
Deprecation of toUTF16
Aug 31, 2017
Andre Pany
Aug 31, 2017
Kagamin
Aug 31, 2017
Andre Pany
August 31, 2017
Hi,

I have some problems to find out what to use instead of the deprecated toUTF16 function.

I am calling a shared library written in Delphi.
While this coding is working fine (with german ü)

import std.utf: toUTF16;
wstring ws = toUTF16(s);
BSTR bStr = SysAllocStringLen(ws.ptr, cast(UINT) ws.length);

This coding fails to display the german ü correctly:

import std.utf: encode;
wchar[] ws;
s.each!(c => encode(ws, c));
BSTR bStr = SysAllocStringLen(ws.ptr, cast(UINT) ws.length);


Variable s is of type string. On delphi side WideString is used as type for the string.
Where is the error?

Kind regards
André
August 31, 2017
import std.conv;
auto ws=s.to!wstring;
August 31, 2017
On Thursday, 31 August 2017 at 17:22:51 UTC, Kagamin wrote:
> import std.conv;
> auto ws=s.to!wstring;

Thank you!

Kind regards
André
August 31, 2017
On 8/31/17 12:12 PM, Andre Pany wrote:
> Hi,
> 
> I have some problems to find out what to use instead of the deprecated toUTF16 function.
> 
> I am calling a shared library written in Delphi.
> While this coding is working fine (with german ü)
> 
> import std.utf: toUTF16;
> wstring ws = toUTF16(s);
> BSTR bStr = SysAllocStringLen(ws.ptr, cast(UINT) ws.length);
> 
> This coding fails to display the german ü correctly:
> 
> import std.utf: encode;
> wchar[] ws;
> s.each!(c => encode(ws, c));
> BSTR bStr = SysAllocStringLen(ws.ptr, cast(UINT) ws.length);
> 
> 
> Variable s is of type string. On delphi side WideString is used as type for the string.
> Where is the error?
> 

The error is actually in the compiler -- the toUTF16 function you are calling is NOT being deprecated. But the compiler mistakenly is marking it as deprecated.

See here:

https://issues.dlang.org/show_bug.cgi?id=17193

-Steve