Re: [fpc-pascal] FPC 3.x for Windows and code page conversion

2015-11-23 Thread Michael Van Canneyt



On Mon, 23 Nov 2015, Lubos Pintes wrote:


Hello,
Thanks for replies, I will try to explain this in other way:
My system code page is windows-1250. When a string is sent to a COM 
component, it is somehow converted to UTF-16. Thus FPC knows how to do 
the conversion. Now I know that I am receiving text in UTF-8. Thus I 
called UTF8ToANSI to uselessly convert the UTF-8 to ANSI and then FPC 
converted it to UTF-16 to make COM happy.


Do not convert to Ansi. 
You should use unicodestring or widestring variables, and send that to COM.



Although it worked well in many cases, a data loss may occur.
So to reformulate this question, how to avoid this useless conversion 
step? I thought that setting the default code page to UTF-8 just do the 
trick.


COM only works with UTF16. The best way is to declare all strings that you 
intend to send to COM to Widestring or UnicodeString.


Michael.
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] FPC 3.x for Windows and code page conversion

2015-11-23 Thread Lubos Pintes

Hello,
Thanks for replies, I will try to explain this in other way:
My system code page is windows-1250. When a string is sent to a COM 
component, it is somehow converted to UTF-16. Thus FPC knows how to do 
the conversion. Now I know that I am receiving text in UTF-8. Thus I 
called UTF8ToANSI to uselessly convert the UTF-8 to ANSI and then FPC 
converted it to UTF-16 to make COM happy.

Although it worked well in many cases, a data loss may occur.
So to reformulate this question, how to avoid this useless conversion 
step? I thought that setting the default code page to UTF-8 just do the 
trick.


Dňa 23. 11. 2015 o 17:29 Jonas Maebe napísal(a):


Lubos Pintes wrote on Mon, 23 Nov 2015:


I am developing a console application which receives an UTF-8 encoded
text through stdin.
The text is, after possible modification, sent to SAPI5. The SAPI5
generated interface wrappers have parameters of type string.
In FPC 2.6.4, I used UTF8toANSI on various places and that worked
well. Now after reading about FPC 3.x's unicode support, I thought
that adding this line say after begin in the main program could be
enough:
SetMultiByteConversionCodePage(CP_UTF8);
It however doesn't work.


That routine sets the default code page for ansistrings. It does not
change I/O.


How can I solve this without conversion to ANSI?


The code page can be set per I/O channel:
http://www.freepascal.org/docs-html/3.0.0/rtl/system/settextcodepage.html (and
Michael: I just noticed a typo on that page, under "Description" it says
GetTextCodePage instead of SetTextCodePage)


Jonas
___
fpc-pascal maillist  -
fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal




___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] FPC 3.x for Windows and code page conversion

2015-11-23 Thread Jonas Maebe


Lubos Pintes wrote on Mon, 23 Nov 2015:

I am developing a console application which receives an UTF-8  
encoded text through stdin.
The text is, after possible modification, sent to SAPI5. The SAPI5  
generated interface wrappers have parameters of type string.
In FPC 2.6.4, I used UTF8toANSI on various places and that worked  
well. Now after reading about FPC 3.x's unicode support, I thought  
that adding this line say after begin in the main program could be  
enough:

SetMultiByteConversionCodePage(CP_UTF8);
It however doesn't work.


That routine sets the default code page for ansistrings. It does not  
change I/O.



How can I solve this without conversion to ANSI?


The code page can be set per I/O channel:  
http://www.freepascal.org/docs-html/3.0.0/rtl/system/settextcodepage.html (and  
Michael: I just noticed a typo on that page, under "Description" it  
says GetTextCodePage instead of SetTextCodePage)



Jonas
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] FPC 3.x for Windows and code page conversion

2015-11-23 Thread Mattias Gaertner
On Mon, 23 Nov 2015 16:43:18 +0100
Lubos Pintes  wrote:

> Hello,
> I am developing a console application which receives an UTF-8 encoded 
> text through stdin.
> The text is, after possible modification, sent to SAPI5. The SAPI5 
> generated interface wrappers have parameters of type string.
> In FPC 2.6.4, I used UTF8toANSI on various places and that worked well. 
> Now after reading about FPC 3.x's unicode support, I thought that adding 
> this line say after begin in the main program could be enough:
> SetMultiByteConversionCodePage(CP_UTF8);

The above setting makes UTF8ToAnsi to convert the string to UTF-16 and
back to UTF-8.

> It however doesn't work.
> How can I solve this without conversion to ANSI?

Do you want to convert an UTF8 string to the system codepage?
Are you using any Lazarus units?

Mattias
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal