Разница в чтении набора символов из командной строкиJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Разница в чтении набора символов из командной строки

Сообщение Anonymous »

Я пытаюсь скомпилировать/преобразовать написанную мной программу Java из «обычного» JDK (Java v24) в скомпилированный код с использованием GraalVM (v25). «Классическая» версия работает нормально. Собственная версия запускается нормально, но затем возникает проблема с аргументами программы, считанными из командной строки, которые, очевидно, имеют набор символов, отличный от тех, которые используются исходным приложением Java (или имя файла обрабатывается по-другому).
Проблема возникает при передаче аргумента имени файла приложению (путем перетаскивания), которое содержит умлауты. Оба варианта программы отображают переданное имя файла (фактически полный путь к файлу) как:

Код: Выделить всё

U:\Documents\Kontoausz�ge\...\Umsatz�bersicht_20250401-20250831.csv
т.е. также в классической версии имя файла, отображаемое на консоли, кажется «искаженным» (� на самом деле является ü в файловой системе), но классическая версия Java находит, открывает и обрабатывает этот файл без каких-либо проблем. Скомпилированный собственный исполняемый файл GraalVM отображает то же самое имя файла, которое также «искажено», но затем выдает исключение FileNotFound-Exception:

Код: Выделить всё

java.io.FileNotFoundException: U:\Documents\Kontoausz�ge\...\Umsatz�bersicht_20250401-20250831_AT221600000100586916.csv (The system cannot find the path specified)
(Примечание: из соображений конфиденциальности я исключил здесь ненужные части пути и заменил их на ...).
Почему такое поведение при обработке имени/пути отличается? Есть ли возможность согласовать набор символов командной строки, используемый собственным кодом, сгенерированным GraalVM, с набором символов, используемым "ванильным" Java-кодом на основе JDK?
Позднее добавление - ответ разное. вопросы:
Это в Windows 10 (установлены все текущие исправления/патчи/обновления).
Здесь не задействована никакая «VM», кроме виртуальной машины Java. Фактическое имя файла/путь — U:\Documents\Kontoauszüge\...\Umsatzübersicht_20250401-20250831.csv
(часть ... пути не содержит умлаутов или других специальных символов).

Код: Выделить всё

C:\>chcp
Active code page: 437
В настройках моего системного региона Windows установлен «Английский (Швейцария)» (да, такой вариант существует). Язык отображения системы — «Английский (США)».
Упомянутое мной перетаскивание осуществляется через Windwos Explorer, «графический интерфейс», о котором некоторые респонденты хотели знать, — это рабочий стол Windows. Я перетаскиваю файл, который хочу обработать, через командный файл, который затем вызывает Java-приложение, передавая аргумент через %1, в командную строку, вызывающую Java-приложение (или .exe в случае GraalVM).
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»