[fpc-pascal] Problems with Postgresql Character Encoding
LacaK
lacak at zoznam.sk
Wed Sep 26 11:30:58 CEST 2012
Mark Morgan Lloyd wrote / napĂsal(a):
> Andrew Brunner wrote:
>> My cloud file/folder sync client desktop app builds and maintains a
>> manifest of all files and folders from a specified starting point. I
>> use this manifest to synchronize disk entries across devices. It
>> uses HTTP requests and XML to carry out all transactions. Meaning
>> there is no TSQLConnection. The problem is that the HTTP server
>> receives the data as XML and refuses to post changes. If data (in
>> updates or inserts) contains non-supported UTF8 characters postgresql
>> rejects with character encoding notices.
>>
>> I've tried with using AnsiToUTF8 and UTF8toAnsi. That works for
>> email messages. However, since sync code has to scan tens of
>> thousands of disk files/folders I don't think it's good for battery
>> and memory consumption for a background app to consume cpu resources
>> in this case going between 2 forms of the same file/folder name.
>>
>> I need to be able to take advantage of Postgresql's client encoding
>> method. I know postgresql allows me to tell the server that the
>> connection is presently character set "LATIN1". And presumably
>> postgresql server will convert what it needs to my database encoding
>> of UTF8.
>>
>> <snip>
>> SystemP^.Connection.Charset:='LATIN1';
>>
>> This does nothing for me when Connection is a postgresql connection.
>>
>> Anyone have any experience with postgresql character sets / encoding???
>
> No, but I'm interested since this is something that I anticipate
> having to do.
>
> You might need to issue an explicit instruction to the PostgreSQL
> server telling it to assume that the current session is encoded as
> /whatever/. If you have to do that then you might find yourself having
> to use the PQConnection's (or whatever the correct name is) low-level
> handle, since working from memory the .Exec method uses a temporary
> handle so any state change isn't retained. I had to delve into this
> when getting listen/notify running reliably.
>
Do you have tried SQL: SET CLIENT_ENCODING TO 'LATIN1' ?
May be that better would be add support for PQsetClientEncoding into
TPQConnection ... I can look at it if you want.
-Laco.
More information about the fpc-pascal
mailing list