You are here: PSPad forum > České diskuzní fórum > Jeden ANSI soubor se otevírá v UTF-16 LE

Jeden ANSI soubor se otevírá v UTF-16 LE

#1 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):

drive.google.com

image

Options: Reply | Quote | Up ^


#2 Re: Jeden ANSI soubor se otevírá v UTF-16 LE

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?

Options: Reply | Quote | Up ^


#3 Re: Jeden ANSI soubor se otevírá v UTF-16 LE

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.bata potom přepnu do HEX zobrazení.

Options: Reply | Quote | Up ^


#4 Re: Jeden ANSI soubor se otevírá v UTF-16 LE

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.

Options: Reply | Quote | Up ^


#5 Re: Jeden ANSI soubor se otevírá v UTF-16 LE

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)

Options: Reply | Quote | Up ^


#6 Re: Jeden ANSI soubor se otevírá v UTF-16 LE

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ě…).

Options: Reply | Quote | Up ^






Editor PSPad - freeware editor, © 2001 - 2021 Jan Fiala, Hosted by Webhosting TOJEONO.CZ, design by WebDesign PAY & SOFT, code Petr Dvořák, Privacy policy and GDPR