Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re^5: How can I get a Unicode @ARGV?

by exilepanda (Monk)
on Aug 31, 2012 at 13:46 UTC ( #991007=note: print w/ replies, xml ) Need Help??


in reply to Re^4: How can I get a Unicode @ARGV?
in thread How can I get a Unicode @ARGV?

Inspired from your test result, I am really wondering if that's the encoding problem or if the argv actually turned into ANSI before pipe to my perl script...

I've wrote a little more in reply to a upper thread. http://www.perlmonks.org/?node_id=991005 Do you think this can mean something ?

Though, thank you very much for the help test! =)


Comment on Re^5: How can I get a Unicode @ARGV?
Re^6: How can I get a Unicode @ARGV?
by Anonymous Monk on Sep 01, 2012 at 13:40 UTC

    Supposedly this is the same as using wmain, but works with mingw

    # define UNICODE # define _UNICODE #include <windows.h> #include <stdio.h> #include <shellapi.h> int __cdecl main() { LPWSTR *szArglist; int nArgs; int i; int ix; int nLength; wprintf(L"commandline==\n%ws\n====\n\n\n", GetCommandLineW() ); szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs); if( NULL == szArglist ) { wprintf(L"CommandLineToArgvW failed\n"); return 0; } else { for( i=0; i<nArgs; i++) printf("%d: %ws\n", i, szArglist[i]); for( i=0; i<nArgs; i++) wprintf(L"\n\n%d: %s\n", i, szArglist[ +i]); //~ http://stackoverflow.com/questions/4014172/wprintf-format-type-spe +cification-ws# c++ - wprintf format type specification %ws - Stack Ov +erflow //~ http://msdn.microsoft.com/en-us/library/ms647550%28VS.85%29.aspx# + wsprintf function (Windows) for( i=0; i<nArgs; i++) { nLength = wcslen( szArglist[i] ); //~ printf("\n{%d: nLength %d}\n", i, nLength ); printf("\n$F[%d] = []; # nLength %d\n", i, nLength ); for( ix=0; ix < nLength; ix++ ){ //~ printf("%d: %d %#04X\n", i, ix, szArglist[i][ix] ) +; //~ printf("{%d: %d %#04X} ", i, ix, szArglist[i][ix] +); printf("$F[%d][%d]=%#04X; ", i, ix, szArglist[i][ix] ) +; if( 0 == (ix % 5) ) { printf("\n"); } } } } // Free memory allocated for CommandLineToArgvW arguments. LocalFree(szArglist); //~ sleep(20); printf("\n"); system("PAUSE"); return(1); }

    And I do appear to get some kind of unicode :)

    $F[1] = []; # nLength 39 $F[1][24]=0X6B; $F[1][25]=0X65; $F[1][26]=0X62; $F[1][27]=0X61; $F[1][28]=0X62; $F[1][29]=0X5C; $F[1][ +30]=0X107; $F[1][31]=0X65; $F[1][32]=0X76; $F[1][33]=0X61; $F[1][34]=0X70; $F[1][ +35]=0X2E; $F[1][36]=0X74; $F[1][37]=0X78; $F[1][38]=0X74; $F[2][24]=0X6B; $F[2][25]=0X65; $F[2][26]=0X62; $F[2][27]=0X61; $F[2][28]=0X62; $F[2][29]=0X5C; $F[2][ +30]=0X72; $F[2][31]=0X61; $F[2][32]=0X17E; $F[2][33]=0X6E; $F[2][34]=0X6A; $F[2] +[35]=0X69; $F[2][36]=0X107; $F[2][37]=0X2E; $F[2][38]=0X74; $F[2][39]=0X78; $F[2] +[40]=0X74; binmode STDOUT, ':encoding(UTF-8)'; fudge(\@F); use Data::Dump; dd\@F; sub fudge { my( $args ) = @_; for my $arg ( @$args ){ next unless defined $arg; my $one = ""; for my $char ( @$arg ){ next unless defined $char; my $chr = chr( $char ); print $chr; $one .= $chr; } print "\n"; dd $one; } } __END__ kebab\&#263;evap.txt "kebab\\\x{107}evap.txt" kebab\ražnji&#263;.txt "kebab\\ra\x{17E}nji\x{107}.txt"

    Now all that is left is to figure out how to call system() in C

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://991007]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (11)
As of 2014-12-22 12:16 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (116 votes), past polls