I made some changes to cwstring (patch appended) in order to be more useful.
In the original state the iconv tables were created before a call to
SetLocale and as such they always transformed Unicode to ANSI. In the
current version a typical program would call SetLocale and then call
SetCWideStringManager to recreate the tables using the new charmap.
--
Geno Roupsky
Index: rtl/unix/cwstring.pp
===================================================================
--- rtl/unix/cwstring.pp (revision 3088)
+++ rtl/unix/cwstring.pp (working copy)
@@ -111,6 +111,7 @@
{$endif}
var
+ is_iconv_open: Boolean = False;
iconv_ansi2ucs4,
iconv_ucs42ansi,
iconv_ansi2wide,
@@ -302,7 +303,32 @@
result:=strcoll(s1,s2);
end;
+procedure Closeiconv;
+begin
+ if is_iconv_open then
+ begin
+ { close conversion tables }
+ iconv_close(iconv_wide2ansi);
+ iconv_close(iconv_ansi2wide);
+ iconv_close(iconv_ucs42ansi);
+ iconv_close(iconv_ansi2ucs4);
+ is_iconv_open := False;
+ end;
+end;
+procedure Openiconv;
+begin
+ if is_iconv_open then
+ Closeiconv;
+
+ { init conversion tables }
+ iconv_wide2ansi:=iconv_open(nl_langinfo(CODESET),unicode_encoding);
+ iconv_ansi2wide:=iconv_open(unicode_encoding,nl_langinfo(CODESET));
+ iconv_ucs42ansi:=iconv_open(nl_langinfo(CODESET),'UCS4');
+ iconv_ansi2ucs4:=iconv_open('UCS4',nl_langinfo(CODESET));
+ is_iconv_open := True;
+end;
+
Procedure SetCWideStringManager;
Var
CWideStringManager : TWideStringManager;
@@ -336,16 +362,15 @@
}
end;
SetWideStringManager(CWideStringManager);
+
+ Openiconv;
end;
initialization
SetCWideStringManager;
- { init conversion tables }
- iconv_wide2ansi:=iconv_open(nl_langinfo(CODESET),unicode_encoding);
- iconv_ansi2wide:=iconv_open(unicode_encoding,nl_langinfo(CODESET));
- iconv_ucs42ansi:=iconv_open(nl_langinfo(CODESET),'UCS4');
- iconv_ansi2ucs4:=iconv_open('UCS4',nl_langinfo(CODESET));
+
finalization
- iconv_close(iconv_ansi2wide);
+ Closeiconv;
+
end.
_______________________________________________
fpc-devel maillist - [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel