While developping a C UNICODE application under AIX 5.3, I encountered the following problem, and after days of investigations I still could not find any solution.
Please note that the application is full wchar_t based (not utf8) and that I could compile and run it without any problem on SunOS.
I managed to isolate the problem into a simple c program:
Here is the unexpected output:
As you can see, the wsprintf call did NOT copy the chars coming from the arabic character set, but did it for the 65, 66, 67 (ABC)... but it copied a single white space (byte 32) instead!
It seems it's related to the installed character sets and to the locales configuration... but then, why using wchar_t strings? This data type and the c functions using it (like wsprintf) are supposed to work whatever the language.
so, my question are:
- What should I do to make this example work ?
- Are the C wchar_t function really character set independent ? (it's the case on Windows and SunOS)
- If necessary, how do I install and use additional character sets ?
I cannot find any manpage for wsprintf on my system at all, and when compiling your example the linker cannot find it. Is it possible that this is not a standard function, and therefore it varies from system to system?
My compiler goes bananas when you declare variables in a for statement like that, too. Apparently that syntax was depreciated in C99.
You are right, the declaration of the i variable in the for is not standard C programming... but I use cpp :-)
Here is the code without it:
Regarding the wsprintf, it's a rather standard wchar function, located in /usr/include/wchar.h (by default) in AIX. Under SunOS, I think it's declared in /usr/include/widec.h.
Corona - see mbstowcs, which is ANSI C99...
tgilbert - try mbstowcs, but mind what locale you are set to. These functions are sensitive to that, and I don't see where you called setlocale().
Also, the conversion of characters is subject to change - see the man page warning.
If you were on an old AIX system, wide chars/data written to files from that system may have problems on a newer system.
- I had to install UTF-8 codepage sets
- I had to call setlocale(LC_ALL, "en_US.UTF-8") in my program. I did not have to under SunOS and Windows. (or call with "" and use the LANG environment variable)
- I had to get rid of my own libiconv.a library and use the one provided by AIX (mine was OK under SunOS and Windows)
hello
there's some stranges code symbols they looks like this:
\u0438 \u0247. unicode i think
this code can be viewed by javascript so i need it
i need to convert casual characters to this code with perl
atm stucked with ord, chr, pack, etc things but they giving other digits (7 Replies)
I'm trying to figure out how to support Unicode or atleast an unsigned char in the d_name of struct dirent
The problem i'm facing is that I'm checking file names for special characters and obviously the "char d_name" doesn't like it. I'm looping through the directory and getting the file... (3 Replies)
im starting to go a little serious with c, woking in a personal project that will read a xml, which might contain Unicode characters (i know it will on my system, which is set to es_AR.UTF-8)
im using mxml, and the documentation says it uses utf8 internally (no worries here).
so i need to be... (4 Replies)
on some distributions UTF-32 is the default and i need to change the size of wchar_t to 2 bytes. i tried to compile it with -fwide-exec-charset=UTF-16 but it didn't help. anyone have any ideas?
thanks,
Akos (3 Replies)
All,
I'm trying to grasp how to use Unicode with/in Unix. I've made progress on some fronts, for example, when uploading files to my server I can use the intermediary language to convert the file to UTF-8.
I'm having trouble getting Samba to do this (I'm using "unix charset" in smb.conf);... (4 Replies)
I have a stream of characters like "\u8BBE\u5907\u7BA1"
and i want to display it.
I tried following things already without any luck.
1) printf("%s",L("\u8BBE\u5907\u7BA1"));
2) printf("%lc",0x8BBE);
3) setlocale followed by fwide followed by wprintf
4) also changed the local manually... (3 Replies)
Hi,
I have some software I need to install on HP-UX 11iv1 64bit but it must not be set up in unicode mode. I know unicode/ ASCII etc. I don't know how to get unix to switch between these. Is there an environment setting for that? I use the Korn shell.
Thanks. (2 Replies)