Desktop.ini в кодировке UTF-16LE, созданный Java, не работает, если он содержит китайские символы.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Desktop.ini в кодировке UTF-16LE, созданный Java, не работает, если он содержит китайские символы.

Сообщение Anonymous »

Я пытаюсь создать файл desktop.ini через Java, чтобы предоставить альтернативное имя для папки Windows11 (так же, как выглядит Мои документы).
Вот простой пример кода (его можно вызвать непосредственно для запуска):

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

@Test
public void createDesktopIni() throws IOException {
String folderPath = Write a folder path here;
String iniPath = folderPath + "\\desktop.ini";
File file = new File(iniPath);
// delete and recreate if exist
if (file.exists()) {
file.delete();
}
file.createNewFile();
// Write content
String alternativeName = "Alternative Name";
//alternativeName = "这是一个中文别名";
OutputStreamWriter oStreamWriter = new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_16LE);
oStreamWriter.write("[.ShellClassInfo]\nLocalizedResourceName = " + alternativeName);
oStreamWriter.flush();
oStreamWriter.close();
// Set system attribute
Files.setAttribute(Paths.get(folderPath), "dos:system", true, LinkOption.NOFOLLOW_LINKS);
Files.setAttribute(Paths.get(iniPath), "dos:system", true, LinkOption.NOFOLLOW_LINKS);
Files.setAttribute(Paths.get(iniPath), "dos:hidden", true, LinkOption.NOFOLLOW_LINKS);
}
Если я задам альтернативное имя на английском языке, desktop.ini сможет работать нормально. (Кстати, в настоящее время этот файл можно открыть обычным способом через VSCode).
Однако, если я задаю альтернативное китайское имя, например комментарий:

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

alternativeName = "这是一个中文别名";
В настоящее время файл desktop.ini не работает.
Если я открою его через VSCode, будет отображено следующее содержимое:
Изображение

Но если я выберу Все равно открыть->Открыть снова с кодировкой UTF-16 LE, а затем сохранить файл как UTF-16 LE через VS Code, он снова работает нормально.
Здесь какие другие кодировки я пробовал:
  • UTF-8 работает, но китайские символы в Explorer.exe искажаются.
  • ГБК работает и не искажается. Но я предпочитаю использовать UTF-16. Я вижу, что desktop.ini в папке Мои документы также использует UTF-16 LE.
    < li>UTF-16 не работает, файл будет закодирован в UTF-16 BE.


Подробнее здесь: https://stackoverflow.com/questions/793 ... contains-c
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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