Вот простой пример кода (его можно вызвать непосредственно для запуска):
Код: Выделить всё
@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);
}
Однако, если я задаю альтернативное китайское имя, например комментарий:
Код: Выделить всё
alternativeName = "这是一个中文别名";
Если я открою его через 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