我是用下列方式,download 文字檔下來,但它都會變成 utf-8 ,可是我需要的是 ANSI ,我應該如何修改程式碼?
<?php
$myFile = '/tmp/123.txt'
header("Cache-Control: public, must-revalidate");
header("Pragma: hack");
header("Content-Type: application/text");
header("Content-Length: " .(string)(filesize($myFile)) );
header('Content-Disposition: attachment; filename="'.$filename.'"');
header("Content-Transfer-Encoding: binary\n");
readfile($myFile);
?>
我覺得要注意一下,ANSI 的說法並不明確,不同的地區實際上是不同的編碼
在繁體中文系統,是指 Big5
簡體中文系統,是指 GB2312
對日本人來說,是指 Shift-JIS
不同國家會有不同的編碼,可以參考:頁碼
所以只說 ANSI 而不說地區,也沒有給原始檔案內容
沒人猜得到要轉成哪個地區的編碼
已經解決了,採用下列方式 https://www.twblogs.net/a/5ee6cc61e61d3441c68b2d15
那個連結中,提到 unicode 是 2 byte 是錯誤的
unicode 只定義字與 unicode 數值的對應關係
而實際編碼是透過 utf-8、utf-16、utf-32、UCS-2 ... 來表達
關於 ANSI,舉個範例好了
如果在繁體中文環境,文字檔只有「屣」一個字
(位元組資料為:E1A2)
那麼在簡體中文環境會看到「幄」
日文環境會看到「發」
下面是模擬的程式
let binaryString = new Uint8Array([0xe1, 0xa2]);
console.log(new TextDecoder('big5').decode(binaryString));
console.log(new TextDecoder('shift-jis').decode(binaryString));
console.log(new TextDecoder('gb2312').decode(binaryString));
感謝指導。
我這個檔案,是要給銀行轉發薪水的,因為接手的舊程式(vfp 寫的),它產出的檔案是 ansi (繁體中文),但我PHP產出的是 utf-8 , 我希望和舊檔案一模一樣,才會需要轉成 ansi , 本來也以為很簡單,實作之後,才發現不容易,最後是這個程式解決了問題。