Die von Java generierte UTF-16LE-codierte Desktop.ini funktioniert nicht, wenn sie chinesische Zeichen enthält
Posted: 24 Dec 2024, 19:13
Ich versuche, über Java eine desktop.ini-Datei zu erstellen, um einen alternativen Namen für den Windows11-Ordner bereitzustellen (so wie Eigene Dateien aussieht).
Hier ist ein einfaches Codebeispiel (es kann direkt zum Ausführen aufgerufen werden):
Wenn ich einen englischen Alternativnamen festlege, kann die desktop.ini normal funktionieren. (Übrigens kann diese Datei derzeit normal über VSCode geöffnet werden).
Wenn ich jedoch einen chinesischen alternativen Namen wie Kommentar festlege:
Derzeit funktioniert die Datei desktop.ini nicht.
Wenn ich sie durch öffne VSCode wird der folgende Inhalt angezeigt:

Aber wenn ich Trotzdem öffnen->Erneut öffnen mit wähle UTF-16 LE-Kodierung und dann die Datei als UTF-16 LE über VS Code speichern, funktioniert es wieder einwandfrei.
Hier sind einige andere Kodierungen, die ich ausprobiert habe:
Hier ist ein einfaches Codebeispiel (es kann direkt zum Ausführen aufgerufen werden):
Code: Select all
@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);
}
Wenn ich jedoch einen chinesischen alternativen Namen wie Kommentar festlege:
Code: Select all
alternativeName = "这是一个中文别名";
Wenn ich sie durch öffne VSCode wird der folgende Inhalt angezeigt:

Aber wenn ich Trotzdem öffnen->Erneut öffnen mit wähle UTF-16 LE-Kodierung und dann die Datei als UTF-16 LE über VS Code speichern, funktioniert es wieder einwandfrei.
Hier sind einige andere Kodierungen, die ich ausprobiert habe:
- UTF-8 funktioniert, aber chinesische Schriftzeichen werden in Explorer.exe verstümmelt.
- GBK funktioniert und es wird nicht verstümmelt . Aber ich bevorzuge die Verwendung von UTF-16. Ich sehe, dass die desktop.ini im Ordner Eigene Dateien auch UTF-16 LE verwendet.
< li>UTF-16 funktioniert nicht und die Datei wird in UTF-16 BE codiert.