You are here: PSPad forum > České diskuzní fórum > Jeden ANSI soubor se otevírá v UTF-16 LE
Posted by: JosefZ | Date: 2016-05-22 19:23 | IP: IP Logged
Divná věc: jeden ze souborů se chybně otevírá v kódování UTF-16 LE ačkoli je to určitě ANSI soubor.
Dokonce i když ho otevřu v PSPad HEX nebo přepnu View -> Hex edit mode , ukazuje že na začátek svévolně přidal Byte order mark 0xFFFE.
Zkusil jsem Clear recent file list a dokonce restartoval Windows po této akci; PSPad je však neústupný a trvá tvrdošíjně na popsaném chování.
Zde je výpis z příkazového okna:
- příkaz FC neshledal rozdílů;
- mezi otevřením cliparserANSI.bat a cliparser.bat jsem (jenom pro tuto zprávu, chování se nezmění i když tento krok pominu) v PSPadu otevřel Tools -> Text DIFF with this file.... Také žádné rozdíly.
- nakonec příkaz TYPE cliparser.bat ukazuje, že v souboru jsou použity skutečně výhradně ANSI znaky.
d:\bat> fc /B cliparser.bat cliparserANSI.bat
Comparing files cliparser.bat and CLIPARSERANSI.BAT
FC: no differences encountered
d:\bat> "C:\Program Files (x86)\PSPad editor\PSPad.exe" cliparserANSI.bat
d:\bat> "C:\Program Files (x86)\PSPad editor\PSPad.exe" cliparser.bat
d:\bat> type cliparser.bat
@echo OFF
echo(
echo before any shift [%~0] [%~1] [%~2] [%~3] [%~4]
echo all %%* = [%*]
echo(
set /A "ii=0"
echo param %%%ii% = %0
:loopfor
set /A "ii+=1"
echo param %%%ii% = %1
SHIFT /1
if not [%1]==[] goto :loopfor
echo(
echo after all shifts [%~0] [%~1] [%~2] [%~3] [%~4]
echo all %%* = [%*]
goto :eof
d:\bat>
A nakonec jsem chtěl přidat screenshot, ale neumím to, takže aspoň link na můj Google Drive (doufám, že funguje):
Posted by: pspad | Date: 2016-05-23 04:09 | IP: IP Logged
Nejprve bych se chtěl zeptat, jak jste poznal, že PSPad otevira soubor jako UTF-16.
Pokud soubor otevřete v HEX editoru PSPadu přímo, pak vidíte jeho skutečný obsah.
Pokud jej otevřete nejprve v PSPadu a následně v HEX editoru, pak vidíte obsah paměti a protože PSPad pracuje interně v unicode, uvidíte obsah unicode. tento rozdíl je popsán i v nápovědě.
Takže znovu zpět k původní otázce. Podle čeho usuzujete, že PSPad otevřel soubor jako UTF-16?
Posted by: JosefZ | Date: 2016-05-23 05:54 | IP: IP Logged
Bez ohledu na metodu či postup otevírání
- windows explorer: right click -> PSPad
- příkazový řádek:"C:\Program Files (x86)\PSPad editor\PSPad.exe" cliparser.bat
obsahem je vždycky rozsypaný čaj: začíná
敀档䙏െ攊档⡯捥潨戠晥牯湡⁹桳晩⁴╛ま⁝╛ㅾ⁝╛㉾⁝╛㍾⁝╛㑾
Přitom identickou kopii toho souboru (viz výsledek binárního porovnáníFC /B
) otevírá správně.
PSPad si prostě do toho souboru svévolně dosadí Byte order mark0xFFFE
, opět bez ohledu na postup:
- windows explorer: right click -> PSPadHex
- příkazový řádek:"C:\Program Files (x86)\PSPad editor\PSPad.exe" cliparser.bat
a potom přepnu do HEX zobrazení.
Posted by: JosefZ | Date: 2016-05-23 06:25 | IP: IP Logged
Ještě příklad z Powershell-ISE:
1. soubor určitě neobsahuje BOM, jeho prvních devět bytů je@echo OFF
:
PS D:\PShell> $bytes = Get-Content -Encoding Byte "D:\bat\cliparser.bat"
PS D:\PShell> for ($ii=0; $ii -lt 9; $ii++) {$bytes[$ii]}
64
101
99
104
111
32
79
70
70
PS D:\PShell>
2. soubor je určitě ASCII/ANSI:
PS D:\PShell> Get-Content -Encoding Ascii "D:\bat\cliparser.bat"
@echo OFF
echo(
echo before any shift [%~0] [%~1] [%~2] [%~3] [%~4]
echo all %%* = [%*]
echo(
set /A "ii=0"
echo param %%%ii% = %0
:loopfor
set /A "ii+=1"
echo param %%%ii% = %1
SHIFT /1
if not [%1]==[] goto :loopfor
echo(
echo after all shifts [%~0] [%~1] [%~2] [%~3] [%~4]
echo all %%* = [%*]
goto :eof
3. PSPad ukazuje přesně tento obsah:
PS D:\PShell> Get-Content -Encoding Unicode "D:\bat\cliparser.bat"
敀档䙏െ攊档⡯捥潨戠晥牯湡⁹桳晩⁴╛ま⁝╛ㅾ⁝╛㉾⁝╛㍾⁝╛㑾൝攊档†污┥‽╛崪捥潨ന猊瑥⼠⁁椢㵩∰†捥潨瀠牡浡┠┥楩‥‽〥氺潯晰牯†敳⁴䄯∠楩㴫
∱†捥潨瀠牡浡┠┥楩‥‽ㄥ†䡓䙉⁔ㄯ†晩渠瑯嬠ㄥ㵝嬽⁝潧潴㨠潬灯潦൲攊档⡯捥潨愠瑦牥愠汬猠楨瑦╛ま⁝╛ㅾ⁝╛㉾⁝╛㍾⁝╛㑾൝攊档†污┥‽╛崪潧潴㨠潥
൦
Edited 1 time(s). Last edit at 2016-05-23 06:27 by JosefZ.
Posted by: pspad | Date: 2016-05-23 06:30 | IP: IP Logged
Smazte soubor PSCache.bin
Je bud v adresari s PSPadem nebo v %APPData%\PSPad
Pokud se soubor takto otevre v PSPadu (kdykoliv neco se spatnou detekci), tak v menu format zmente kodovou stranku na spravnou s dejte reload (Ctrl+R)
Posted by: JosefZ | Date: 2016-05-23 08:52 | IP: IP Logged
Ctrl+R jsem zkoušel neúspěšně už kdysi a teď znovu.
Pomohl teprve vymaz souboru %APPData%\PSPad\PSCache.bin, děkuji.
Nechtěl bych plýtvat Vaším časem a úsilím, ale k hlubokým díkům jak za samotný editor PSPad, tak i za vždy rychlou a profesionální podporu zde na fóru dovoluji si připojit jeden námět (možná jsem tu možnost jenom dosud nenašel):
Mám nastaveno Program settings… -> Files and Dirs -> Same As Active Document
V nápovědě je Sets the Open Dialog to the directory of the active document.
Funguje perfektně nejen pro Open, ale i pro Save as….
Běžně pracuji na souborech (nikoli v projektech) různých typů.
Námět pro Save pro případ nového souboru jiného typu než aktivní dokument
- buď Main toolbar -> Create new file -> [<typ souboru> z popup menu]
- nebo File -> New file… -> [<typ souboru> z dialogu]
Potom Save i Save as… dialog nabízí adresář odpovídající souboru aktivnímu v době vytvoření.
Uvítal bych, kdyby každý typ souboru (highlighter) mohl mít předvolbu pro uložení "nového" souboru někde v nastavení, něco jako:
Settings -> Highlighters Settings... -> Specification tab -> New file default directory
Samozřejmě, nastavení z projektu by asi mělo přednost, ale, jak již jsem uvedl, pracuji výhradně s jednotlivými soubory mimo projekty (a Tool panel mám vždy schovaný - možná ke své škodě…).
Editor PSPad - freeware editor, © 2001 - 2024 Jan Fiala, Hosted by Webhosting TOJEONO.CZ, design by WebDesign PAY & SOFT, code Petr Dvořák, Privacy policy and GDPR