Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP] Jak wymusić zapis do pliku z kodowniem utf-8

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.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)