XPCE process invocation and character encoding

[email protected] Fri, 27 Jun 2014 20:15:48 -0430
Newsgroups gmane.comp.ai.prolog.swi
Message-ID <[email protected]>
Dear All,

I am writing a XPCE based GUI for swish-e which I will release as free
software, but I am having problems passing latin characters to a process
using this code (from Jan's XPCE userguide):

call_unix(Utl, Args, Output) :-
	NewTerm =.. [process, Utl | Args],
	new(P, NewTerm),
	%send(P, environment, 'LANG', 'es_VE.UTF-8'),
	%send(P, environment, 'LANGUAGE', 'es_VE:es'),
	send(P, use_tty, @off),
	new(OS, string),
	send(P, record_separator, @nil),
	send(P, input_message, message(OS, append, @arg1)),
	send(P, open),
	send(P, wait),
	pce_string_to_list(OS, Output),
	send(P, done),
	send(OS, done).

The problem can be seen in the following traces of the tests:

test_swish1 :-
   shell('swish-e -w "Asociación de Profesores del Instituto Pedagógico de
Caracas UPEL"', L).

which uses the shell directly, and

test_swish2 :-
   call_unix('swish-e', ['-w' ,'Asociación de Profesores del Instituto
Pedagógico de Caracas UPEL'], Output), name(A, Output), writeln(A).

the first gives the right answer:

?- cea:test_swish1.
# SWISH format: 2.4.7
# Search words: Asociación de Profesores del Instituto Pedagógico de
Caracas UPEL
# Removed stopwords:
# Number of hits: 11
# Search time: 0,073 seconds
# Run time: 0,092 seconds
1000 ./pdfs/v8n25/articulo14.pdf "articulo14.pdf" 334273
946 ./pdfs/v13n46/articulo28.pdf "articulo28.pdf" 734363
920 ./pdfs/v11n38/articulo18.pdf "articulo18.pdf" 512974
907 ./pdfs/v10n32/articulo21.pdf "articulo21.pdf" 373669
901 ./pdfs/v5n13/articulo5-13-5.pdf "articulo5-13-5.pdf" 193489
898 ./pdfs/v13n46/articulo10.pdf "articulo10.pdf" 1349930
888 ./pdfs/v12n42/articulo16.pdf "articulo16.pdf" 1030090
863 ./pdfs/v13n44/articulo17.pdf "articulo17.pdf" 415354
799 ./pdfs/v13n46/articulo3.pdf "articulo3.pdf" 1036807
739 ./pdfs/v13n44/articulo14.pdf "articulo14.pdf" 400571
504 ./pdfs/v4n11/articulo4-11-14d.pdf "articulo4-11-14d.pdf" 27258
.
true.

but the second does not:

?- cea:test_swish2.
# SWISH format: 2.4.7
# Search words: Asociación de Profesores del Instituto Pedagógico de
Caracas UPEL
# Removed stopwords:
err: no results
.

true.

I am pretty sure the problem is that the process is not receiving those
"ó" with the proper encoding. But I don't see how to change that
behaviour. As you can see in the comments in the first code, I tried
setting the locale environment variables. I didn't work.

Any hint?

Best regards,

Jacinto

-- 
Jacinto A. Dávila.
http://webdelprofesor.ula.ve/ingenieria/jacinto/
Universidad de los Andes, Venezuela.