2 * On Windows, a Unicode argument is passed as UTF-16 using ShellExecuteExW.
3 * On other platforms, it is passed as UTF-8
6 static const int args_length
= 4;
7 #if defined(XP_WIN) && defined(_MSC_VER)
12 static const _TCHAR
* expected_utf16
[args_length
] = {
16 L
"\x41C\x43E\x437\x438\x43B\x43B\x430",
18 L
"\x9AE\x9CB\x99C\x9BF\x9B2\x9BE",
20 L
"\xD808\xDE2C\xD808\xDF63\xD808\xDDB7"
23 int wmain(int argc
, _TCHAR
* argv
[]) {
24 printf("argc = %d\n", argc
);
26 if (argc
!= args_length
+ 1)
29 for (int i
= 1; i
< argc
; ++i
) {
30 printf("expected[%d]: ", i
- 1);
31 for (size_t j
= 0; j
< _tcslen(expected_utf16
[i
- 1]); ++j
) {
32 printf("%x ", *(expected_utf16
[i
- 1] + j
));
36 printf("argv[%d]: ", i
);
37 for (size_t j
= 0; j
< _tcslen(argv
[i
]); ++j
) {
38 printf("%x ", *(argv
[i
] + j
));
42 if (_tcscmp(expected_utf16
[i
- 1], argv
[i
])) {
53 static const char* expected_utf8
[args_length
] = {
55 "M\xC3\xB8z\xC3\xAEll\xC3\xA5",
57 "\xD0\x9C\xD0\xBE\xD0\xB7\xD0\xB8\xD0\xBB\xD0\xBB\xD0\xB0",
59 "\xE0\xA6\xAE\xE0\xA7\x8B\xE0\xA6\x9C\xE0\xA6\xBF\xE0\xA6\xB2\xE0\xA6\xBE",
61 "\xF0\x92\x88\xAC\xF0\x92\x8D\xA3\xF0\x92\x86\xB7"
64 int main(int argc
, char* argv
[]) {
65 if (argc
!= args_length
+ 1)
68 for (int i
= 1; i
< argc
; ++i
) {
69 printf("argv[%d] = %s; expected = %s\n", i
, argv
[i
], expected_utf8
[i
- 1]);
70 if (strcmp(expected_utf8
[i
- 1], argv
[i
])) {