Napisany przez: Aleksiej 11.02.2024, 03:13:13
Chcę napisać kod php zapisujący pliki kodowane jako utf-8.
Plik wynikowy jest plikiem tekstowym z kodami, które są przekokodowywane co czyni zapisany plik nieużytecznym.
Symulator obwodów elektronicznych QSPICE ma pliki tekstowe z symbolami tranzystorów, a ja chciałem wygenerować automatycznie cały komplet plików symboli tranzystorów z katalogu nazw tranzystorów.
https://www.qorvo.com/design-hub/design-tools/interactive/qspice
Wzorzec graficznego symbolu tranzystora jest zapisany jako $s.
Wymiana nazw tranzystora na inny i zapis do pliku powinien dać nowy element jako symbol.
Problem mam taki, że plik zapisywany pozornie wygląda na poprawny, lecz nie jest zakodowany jako kod w stronie kodowej Windows, a iso.
QSPICE nie widzi tak stworzonego pliku.
Jak wymusić w PHP, by plik zapisywany przez funkcję fwrite miał binarnie strone kodową UTF, a nie ISO?
Kod
<?php
$s ='˙Ř˙Ű«symbol
«type: QN»
«description: NPN Bipolar Transistor»
«library file: trany_BJ.lib»
«shorted pins: false»
«line (100,180) (-10,70) 0 0 0x1000000 -1 -1»
«line (-10,-70) (100,-180) 0 0 0x1000000 -1 -1»
«line (-20,0) (-100,0) 0 0 0x1000000 -1 -1»
«line (100,-200) (100,-180) 0 0 0x1000000 -1 -1»
«line (100,180) (100,200) 0 0 0x1000000 -1 -1»
«rect (-20,100) (-10,-100) 0 0 0 0x1000000 0x1000000 -1 0 -1»
«triangle (100,-180) (65,-125) (45,-145) 0 0 0x1000000 0x3000000 -1 -1»
«text (200,200) 1 7 0 0x1000000 -1 -1 "Q"»
«text (200,-200) 1 7 0 0x1000000 -1 -1 "KT940A"»
«pin (100,200) (0,0) 1 0 0 0x0 -1 "C"»
«pin (-100,0) (0,0) 1 0 0 0x0 -1 "B"»
«pin (100,-200) (0,0) 1 0 0 0x0 -1 "E"»
»
';
$enc = mb_detect_encoding($s);
$s = mb_convert_encoding($s, "UTF-8", $enc);
$out = fopen("tranzystor.qsym", "w");
fwrite($out, $s);
fclose($out);
?>
Notepad++ plik powstały pokazuje pozornie jako właściwy.
QSPICE nie widzi jednak tak zapisanego symbolu tranzystora.
Symbol zapisany w QSPICE jest zakodowany w standardzie kodowania Windows.
Zapisany przez PHP ma stronę kodową iso.
UNIRED edytor pokazuje różnicę. Inne edytory kodu nie.