Wie kann man ein diakritisches Problem an der Eingabeaufforderung beheben?

1404
kokbira

Vereinfachtes Problem:

Ich habe eine Datei mit dem Namen Bíblia sagrada.exe( man beachte die í) auf C:\meinem Computer.

Wenn ich eine Eingabeaufforderung öffne C:\und ausführen dir /b /on B*.*, wird Folgendes angezeigt :

Bíblia sagrada.exe 

dh keine Probleme mit diakritischen Symbolen.

Aber wenn ich dir /b /on B*.*> c: \ a.txt mache und c:\a.txtmit dem Editor öffne, wird es zu:

B¡blia sagrada.exe 

dh es ersetzt ídurch ¡.

Und wenn ich es ausführe for /f "delims=" %i in ('dir /b /on B*.*') do %i > %i.txt, wird der richtige Name in den Dateinamen eingefügt, aber darin ist der Text immer noch falsch, dh

Dateiname:

Bíblia sagrada.exe.txt 

Inhalt:

B¡blia sagrada.exe 

Was ist los?

PS:

Echtes Problem

Das Problem ist für mich schlimmer, als ich beim ersten Bearbeiten berichtet habe, weil ich den Inhalt einer TXT-Datei gelesen habe, um ein VBS-Skript zu erstellen und dann auszuführen. Beim Versuch, es auszuführen, "versteht es nicht", dass es auf "Bíblia sagrada.exe" verweist und das Programm nicht ausgeführt wird ... dh ich habe eine .bat für d: \ atalhizador \ atalhizador.bat erstellt:

@echo off  ::locais set drvbak= set drvprogrs= set pathbak=%cd% set pathabove= set pathprogrs=%userprofile%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs  ::identificador da pasta do programa no menu iniciar set id=_pext1  ::determina drives de acordo com paths for /f "delims=" %%z in ("%pathbak%") do set drvbak=%%~dz for /f "delims=" %%z in ("%pathprogrs%") do set drvprogrs=%%~dz  ::pega caminho superior cd.. set pathabove=%cd% cd %pathbak%  cls echo.*************** echo.* ATALHIZADOR * echo.*************** echo. echo.Deseja realmente executar o atalhizador para a pasta: cd.. echo. %cd% cd %pathbak% echo. [s/n]: set /p ___o= if not "%___o%"=="s" if not "%___o%"=="S" goto end  echo. echo.Criando os atalhos... for /f "delims=" %%a in ('dir /b /ad /on ..') do ( echo.- pasta "%%a"... echo. ^|-- buscando arquivos atalhizaveis... if not exist "temp" mkdir "temp" dir /b /on "..\%%a\*.exe" 1>temp\busca.txt 2>temp\erros.txt for /f "delims=" %%b in (temp\busca.txt) do ( echo. ^|-- criando atalho para %%b  for /l %%z in (1,1,1) do set __temp__=  if not exist "%pathprogrs%\%id%" mkdir "%pathprogrs%\%id%" if not exist "%pathprogrs%\%id%\%%a" mkdir "%pathprogrs%\%id%\%%a"  echo.Set oWS = WScript.CreateObject^("WScript.Shell"^) > temp\%%~na-%%~nb.vbs echo.sLinkFile = "%pathprogrs%\%id%\%%a\%%b.lnk" >> temp\%%~na-%%~nb.vbs echo.Set oLink = oWS.CreateShortcut^(sLinkFile^) >> temp\%%~na-%%~nb.vbs echo.oLink.TargetPath = "%pathabove%\%%a\%%b" >> temp\%%~na-%%~nb.vbs echo.oLink.Save >> temp\%%~na-%%~nb.vbs  cscript /nologo temp\%%~na-%%~nb.vbs ) )  :end %drvbak% cd %pathbak%  pause @echo off 

Die erwähnte "Bíblia sagrada.exe" befindet sich in d: \ Bíblia sagrada.

Die generierte .vbs-Datei befindet sich unten (angenommen, dass es nur diese beiden Verzeichnisse auf d :) gibt, mit dem Dateinamen D: \ atalhizador \ temp \ Bíblia Sagrada-Bíblia Sagrada.vbs:

Set oWS = WScript.CreateObject("WScript.Shell")  sLinkFile = "C:\Users\Ubirajara\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\_pext1\B¡blia Sagrada\B¡blia Sagrada.exe.lnk"  Set oLink = oWS.CreateShortcut(sLinkFile)  oLink.TargetPath = "D:\_pext1\B¡blia Sagrada\B¡blia Sagrada.exe"  oLink.Save  

Die Angelegenheit? Die Verknüpfung wird nicht erstellt, weil "sLinkFile =" C: \ Benutzer \ Ubirajara \ AppData \ Roaming \ Microsoft \ Windows \ Startmenü \ Programme_pext1 \ B¡blia Sagrada \ B¡blia Sagrada.exe.lnk "nicht erkannt wird." .

Es passiert nicht, wenn ich keine diakritischen Zeichen benutze, aber ich habe wirklich viele Ordner und Dateien mit diesen Signalen ...

Wie kann man es korrigieren, damit die .vbs-Datei korrekt geschrieben werden kann?

PS2:

Ich habe die folgenden Befehle alleine und zusammen ohne Erfolg ausprobiert:

cmd /u  chcp 860  chcp 1200  mode con cp select=860  mode con cp select=1200 

Ich habe es auch mit cmd-Rasterschrift und mit anderen verfügbaren Schriftarten ausprobiert ...

5
Stellen Sie sicher, dass Sie eine Schriftart hinzufügen, die diese unterstützt. http://stackoverflow.com/questions/9321419/unicode-utf-8-text-file-gibberish-on-windows-console-trying-to-display-hebrew zB Courier New und laden Sie DejaVu Sans Mono und Droid Sans Mono herunter Sie können diese 3 hinzufügen. Die letzten beiden müssen heruntergeladen werden, wenn Sie sie möchten. barlop vor 7 Jahren 0

4 Antworten auf die Frage

4
Mechanical snail

Der Editor öffnet Ihre Datei mit der falschen Kodierung. Versuchen Sie es mit dem Dialogfeld "Öffnen" zu öffnen, und wählen Sie unten weitere Kodierungen aus:

Kodierungsauswahl

Beachten Sie, dass Microsoft nicht standardmäßige Namen für die Kodierungen verwendet. "Unicode" ist eigentlich UTF-16LE und "Unicode big endian" ist eigentlich UTF-16BE.

Siehe meine Bearbeitung :) Das Problem ist schlimmer als ich geschrieben habe ... kokbira vor 11 Jahren 0
Das Öffnen, wie Sie es vorgeschlagen haben, löst auch das "Anzeigeproblem" nicht. Bei ANSI tritt dasselbe Problem auf; In Unicode und Unicode Big Endian werden keine Buchstaben angezeigt. Bei UTF-8 ersetzt es ¡¡mit ,, aber nicht mit ... ... dh korrekte Kodierung "geht möglicherweise verloren" :( kokbira vor 11 Jahren 0
@kokbira Wenn Notepad es nicht mit einer Schriftart öffnen kann, die es anzeigen soll, und selbst wenn Sie wissen, dass Sie es mit der entsprechenden Kodierung öffnen, die einem Unicode-Typ entspricht, falls vorhanden, wurde es möglicherweise nicht in die Datei geschrieben Wenn Sie versuchen, alle anderen Zeichen als die lustigen zu löschen, dann mit xxd zu sehen, wie der Charakter in die Datei geschrieben wird, kann es passieren, dass etwas falsch codiert ist. So benutzte etwas eine Schriftart, die es nicht unterstützte, und ersetzte dieses Zeichen durch ein anderes und kodierte ein anderes Zeichen an seiner Stelle. Der Editor war dann nicht fehlerhaft, als das falsche Zeichen angezeigt wurde. barlop vor 7 Jahren 0
1
harrymc

Das Festlegen der Codepage auf UTF-8 sollte Folgendes unterstützen:

chcp 65001 

Das dirErgebnis wird dann in UTF8 codiert.

Wenn VBS es nicht so verstehen kann, dass die Datei unter Windows automatisch als UTF8 erkannt wird, müssen Sie ihr die UTF8-BOM-Bytes voranstellen :

0xEF, 0xBB, 0xBF 

Sie können dann mit einer Datei beginnen, die die Stückliste enthält, und sie anfügen, anstatt zu schreiben:

chcp 65001 copy EFBBBF.txt a.txt dir /b /on B*.* >> a.txt 

Oder Sie können verwenden, copy /bum die Dateien zu verketten.

Obwohl chcp 65001 den c # -Compiler abstürzt. Ich nehme an, dass es nicht wichtig ist, es sei denn, sie ließen den c # -Compiler in dieser Shell laufen. Siehe "hinzugefügte 2" in Frage hier http://stackoverflow.com/questions/30956834/why-is-csc-exe-crashing-when-i-last-left-the-output-encoding-as-utf8 barlop vor 7 Jahren 0
Außerdem möchte man speziell die Codepage für die Ausgabeumleitung ändern. chcp ändert beide und ohne Parameter zeigt die Eingabecodierung an. Chcpa https://sourceforge.net/p/chcp-advanced/discussion/general/thread/61312465/ zeigt ein Programm, das die Kodierung anzeigen und ändern kann. barlop vor 7 Jahren 0
Ich habe `chcp 'getestet, und cmd stürzt wirklich ab. Das Programm wird ohne Fehlermeldung beendet, wenn Sie zum Beispiel' dir 'verwenden, nachdem Sie es aufgerufen haben. Wenn Sie die Ausgabe jedoch in eine Datei umleiten, ist dies in Ordnung, und die Ausgabedatei befindet sich in UTF8. Ich habe "chcpa" ausprobiert, aber es wird von Windows 7 nicht erkannt. kokbira vor 7 Jahren 0
Jetzt versuche ich den VBS-Teil der Ausgabe ... kokbira vor 7 Jahren 0
Obwohl es keine vollständige Antwort ist, da ich den VBS-Teil noch nicht lösen kann (ich muss mehr darüber nachdenken), ist dies die bessere Antwort. kokbira vor 7 Jahren 0
Hilft [dieser Beitrag] (http://stackoverflow.com/a/13855268/165358)? harrymc vor 7 Jahren 0
1
Aganju

Sie können das Problem umgehen, indem Sie /Xalle DIRBefehle hinzufügen .

Dadurch erhalten Sie den 8.3-Kurznamen (DOS-Name) aller Dateien. Alle weiteren Vorgänge sind mit diesem Namen gültig und es werden keine UTF-Probleme auftreten.

vielleicht aber können sie etwas näher erläutern, was 8.3 mit UTF zu tun hat? barlop vor 7 Jahren 0
Der Name 8.3 enthält keine Sonderzeichen oder diakritischen Zeichen, so dass zwischen verschiedenen Programmen, die unterschiedliche UTF-Codierungen verwenden, keine Probleme auftreten Aganju vor 7 Jahren 0
Ich stelle fest, dass, wenn ich `dir 2012 *. * / X 'mache, der vollständige Name (länger als 8.3) erscheint. Und auch wenn ich 'dir א / x' mache, zeigt es immer noch diesen Charakter. Ich glaube nicht, dass / x notwendigerweise 8.3 macht oder Zeichen ändert, um in ASCII zu sein. barlop vor 7 Jahren 0
Das `/ X` muss vor dem ersten Verzeichnis oder der ersten Datei stehen, andernfalls wird es als anderes Verzeichnis betrachtet. In Ihrem ersten Beispiel wäre es "DIR / X 2012 *. *". Aganju vor 7 Jahren 0
1
Frank Sixteen

Um den Teil zu lösen, dessen falsche Schriftart in Notepad angezeigt wird, müssen Sie die Codepage verwenden, da Noti Ansi als Standard verwendet. Eine bessere Lösung ist eher die Verwendung von Notepad ++, mit der Sie zur gewünschten Codepage wechseln können. Außerdem können Sie sogar eine bessere Shell mit Unterstützung für Unicode verwenden, sodass der Fehler zunächst nicht auftritt.