United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-4947220 (process) Runtime.exec() cannot invoke applications with unicode parameters (win)
JDK-4947220 : (process) Runtime.exec() cannot invoke applications with unicode parameters (win)

Details
Type:
Bug
Submit Date:
2003-10-31
Status:
Closed
Updated Date:
2011-05-05
Project Name:
JDK
Resolved Date:
2011-03-08
Component:
core-libs
OS:
windows_2003,generic,windows_xp,windows_2000
Sub-Component:
java.lang
CPU:
x86,generic
Priority:
P2
Resolution:
Fixed
Affected Versions:
6,6u21,6-pool,7
Fixed Versions:

Related Reports
Backport:
Backport:
Backport:
Duplicate:

Sub Tasks

Description
Name: gm110360			Date: 10/31/2003


FULL PRODUCT VERSION :
java version "1.4.2"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-b28)
Java HotSpot(TM) Client VM (build 1.4.2-b28, mixed mode)

FULL OS VERSION :
Microsoft Windows 2000 [Version 5.00.2195]

A DESCRIPTION OF THE PROBLEM :
I'm trying to invoke a C++ executable from java using the Runtime.exec() method. The C++ application accepts a filename as a command line argument & opens the file. This C++ app is unicode enabled i.e. it can accept UTF-16 (wide char) parameters. However, when i invoke this application using Java's Runtime.exec() and specify a japanese file name as an argument, the japanese characters get converted to '?' characters by the time they are received in the C++ application. I'm running this application on Windows 2K, default i.e. English version.

Looking at the source code of Runtime class, it seems that the exec()
function makes use of a native helper function - execInternal(). This function seems to be converting the parameters from UTF-16 to the system encoding.

I'm more surprised because the VC++ counterpart of this function i.e. CreateProcessW() does work in this case i.e. it is able to invoke an external application with unicode parameters (say with japanese arguments on an English Windows).

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Runtime.exec() should be able to invoke external applications with Unicode arguments i.e. the user should be able to pass japanese arguments on an English Windows.

REPRODUCIBILITY :
This bug can be reproduced always.
(Incident Review ID: 207056) 
======================================================================

                                    

Comments
EVALUATION

Java is a pure Unicode system, and so is Windows, if one consistently
uses the "W" operating system functions at the C level.  Java should
move to doing things this way.  Currently a mixture of the W and A functions
are being used.  

This is too risky and too large a change for Tiger.  Hopefully we can finish
the job in Mustang.
###@###.### 2003-10-31
                                     
2003-10-31
CONVERTED DATA

BugTraq+ Release Management Values

COMMIT TO FIX:
mustang


                                     
2004-09-07



Hardware and Software, Engineered to Work Together