В моей копии Windows разделитель путей не является обратным слэшем, а знаком валюты Корейского выигрыша, который является символом U20A9 в Unicode.
Однако, когда моя программа ищет этот символ в строке, представляющей путь к файлу, она не находит ее, даже если она отображается как ожидаемая при печати пути.
Моя программа зарегистрирована в Проводнике для отображения в меню правой кнопки мыши для файлов, поэтому он получает путь к файлу из проводника в качестве аргумента командной строки.
Что здесь происходит? Как найти разделители путей в аргументе командной строки?
Вы используете японскую или корейскую версию Windows? В этом случае символ пути должен по-прежнему быть U+005C, который отображается как (но не тот же код), что и символ местной валюты (например, ₩ и ¥) вместо \. Если вы попытаетесь найти U+005C вместо U+20A9, это сработает?
Но я смущен этим вопросом вашего вопроса:
Java не может открыть файл как объект File, потому что разделитель файлов в моей копии Windows не является обратным слэшем, это знак валюты корейского Won (U20A9).
Он все равно должен работать, пока вы сами не вводите тестовые пути и не используете "неправильную" версию символа валюты (и пока нет никаких других проблем с файлом). Это может помочь, если мы увидим ваш код.
Причина - это страницы кода, используемые для отображения. У Каплана было сообщение в блоге об этом на MSDN, но оно исчезло. Он в основном сказал: "Японская кодовая страница 932: 0x005C - это YEN SIGN. Корейская кодовая страница 949: 0x005C - ЗВУК".
Кодовая страница Windows и OEM-наборы символов, используемые в системах на японском языке, содержат символ Йены (¥) вместо обратного слэша (\).... При отображении Unicode на кодовую страницу на японском языке функции преобразования отображают как обратную косую черту (U + 005C), так и обычный символ Юникод Йен (U + 00A5) для этого же символа.
В соответствии с этой ссылкой выше обратите внимание, что если вы попытаетесь использовать фактические символы Won и Yen (U+00A5 и U+20A9) в качестве разделителей путей, вы не можете не отображать/сопоставлять их с U+005C.
Релевантные мелочи
Я не могу вспомнить, где я это прочитал, но это помогает понять, почему все это происходит, и почему / работает в пути к файлу.
По-видимому, причина, по которой окна используют \ вместо * nix /, - это потому, что (когда родилась DOS) кто-то, кто сделал много программ DOS в MS/IBM, использовал / как символ "switch" для DOS-программ? Это было решение, которое, возможно, произошло даже до DOS CP/M, через QDOS, до MSDOS. DOS не поддерживала каталоги, поэтому столкновение с * nix не имело значения. К тому времени, когда DOS 2.0 появился вместе с файлами и файловыми путями, они хотели создать систему имен имен файлов типа * nix, но не могли использовать "DOS-переключатель" /, поэтому вместо этого использовали \.
НО - они закодировали DOS, чтобы принять оба \ и /, поскольку они действительно предпочли бы использовать стиль * nix. (Они также добавили механизм OS для изменения символа переключателя, который я не помню, но мир Windows никогда полностью не "переключился" на стиль * nix путей и переключателей).
РЕДАКТИРОВАТЬ
Найдено: линия Shebang в Windows:
Дэйв Анхель давеа на davea.name
Вт Фев 26 03:23:58 CET 2013
Фактически причина, по которой MSDOS использовала обратную косую черту, заключалась в том, что она уже использовала косую черту для символа-переключателя. Затем для версии 2, когда жесткие диски поддерживаются в первый раз, вместо этого они использовали обратную косую черту. В то время я говорил им в поддержку вызова "switchchar", чтобы перейти к использованию тире для символа переключения и косой чертой для подкаталогов.