1. 程式人生 > >關於PHP fopen函式在windows系統上建立中文命名的文件時亂碼的問題

關於PHP fopen函式在windows系統上建立中文命名的文件時亂碼的問題

眾所周知,PHP的fopen函式可以建立一個新文件,但如果你建立的這個文件,以中文來命名,並且你使用的是windows系統的話,會發現文件名的中文部分會亂碼。下面來做一下實驗:

PHP指令碼(UTF-8編碼)

<?php
$fileName = __DIR__ . '/中文文件.txt';
//$fileName = iconv('UTF-8', 'GBK', $fileName);
$fp = fopen($fileName, 'w');
fwrite($fp, '這是中文內容');
fclose($fp);
?>

執行上面指令碼,瀏覽新建立的文件:
亂碼
可以看到,文件名亂碼了,但文件裡的內容沒有亂碼。

解決方法

將上面PHP指令碼的第二句程式碼的註釋去掉,將$fileName由UTF-8編碼轉換成GBK編碼,然後再執行一次指令碼,發現文件名不會亂碼了:
不亂碼

最後

目前這種情況只發現在windows系統上存在,在Mac OS/Linux上正常,所以在Unix/Linux系統上,無需對文件名的編碼進行轉換,如果你硬是要將文件名轉換成GBK編碼,這樣反而會亂碼了,例如這樣:
這裡寫圖片描述

相關推薦

關於PHP fopen函式windows系統建立中文命名亂碼的問題

眾所周知,PHP的fopen函式可以建立一個新文件,但如果你建立的這個文件,以中文來命名,並且你使用的是windows系統的話,會發現文件名的中文部分會亂碼。下面來做一下實驗: PHP指令碼(UTF-8編碼) <?php $fileName = __D

關於windows系統傳大於4G到linux的方法

-o sha entos x86 mage src images term 幹貨 閑著無聊,寫篇博文吧 !!!說點什麽呢 ,請看標題,這段時間有網友問我(多半小白),怎麽上傳大文件到linux,好啦廢話不多說,上幹貨1. 首先1> 下載安裝x-shell 6(自行下載

php 打包下載服務器指定目錄的

encoding osi esc sts enc 參數 content arc inux 參考代碼如下: //獲取文件列表 function list_dir($dir){ $result = array(); if (is_dir($dir))

boost_1_34_1在c++builder6編譯(把所有dll復制到windows系統目錄,所以lib復制到bcb6lib目錄)

解壓 string unit source bject 找到 nbsp catch charset boost_1_34_1.zip boost 正則表達式 bcb6編譯boost_1_34 有個項目要對大量的文本信息進行分析,以前的方法是自己寫函數然後進行

window nginx 中文路徑, 亂碼問題解決

題解 設置 nginx windows系統 erro 我們 ima alt 通過 window nginx 中文路徑, 文件名亂碼, error, not found 此問題是由於windows系統編碼與nginx編碼設置不一致導致的,因此我們要統一二者的編碼 nginx編

windows系統建立執行緒常用的函式及其區別

在windows系統中建立執行緒的函式有以下幾個方法: CreadThread,AfxBeginThread,_beginthread,_beginthreadex。 一、CreateThread HANDLE WINAPI CreateThread( __in

[apue] Linux / Windows 系統只能建立不超過 PATH_MAX / MAX_PATH 長度的路徑嗎?

問題的提出 在處理檔案系統路徑的時候,我們一般會先開闢一塊記憶體區,用來接收路徑、或者拼接好路徑傳遞給系統呼叫。這是因為路徑在各個系統上都有最大長度限制,在 Windows 上這個值是 MAX_PATH,一般不能超過 260;在 Linux 上這個值是 PATH_MAX,一般不能超過 4096 (或者通過 p

TensorFlow - 在 windows 系統安裝

conda 安裝 rsh anaconda src 最新 之前 power ins 安裝方式: 1、pip (將介紹) 2、Anaconda 我采用的是本地 pip 方式 需提前安裝 Python - Python 3.5.x > TF 只支持 Python 3

Windows系統以C++打印出當前活動用戶的環境變量

include copyto cal ntb views read += tac windows.h 在Windows系統上以C++打印出當前活動用戶的環境變量,代碼如下(QT環境): [cpp] view plain copy void

非Unicode編碼的軟如何在Windows系統運行

更改 軟件 class src 常常 為什麽 local 計算 clas 我們常常會遇到這樣一種情況:點開某些日文軟件(我不會說就是galgame( ╯□╰ ))會出現亂碼或者直接無法運行 出現亂碼的原因很簡單:編碼與譯碼的方式不一致!!!!!!!!!!! 首先大家需要

如何把雲端服務器的file04.c傳輸到本地pc機windows系統上去呢?

win lcd alt 如何 -c class 文件的 目錄 對話框 一般服務器會放在機房,很多時候我們一般是通過一某個終端軟件進行遠程連接到服務器,然後再去工作。 那麽我們如何把雲端服務器上的file04.c文件傳輸到本地pc機windows系統上去呢? 1、在Secur

Windows系統安裝JDK以及eclipse

load class jre spa ror clas ont ogr javase 下載JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下載根

Windows系統配置aria2

本地 快捷 seed target windows har o-c ipv6 ase Aria2是一個命令行下運行、多協議、多來源下載工具(HTTP/HTTPS、FTP、BitTorrent、Metalink),並且支持迅雷離線以及百度雲等常用網盤的多線程下載(甚至可

Windows系統安裝zabbix_agent

包括 數據庫 oss watermark 報表 存放位置 fff 4.6 維護 Zabbix概述 Zabbix是一個高度集成的企業級開源網絡監控解決方案,與Cacti、Nagios類似,提供分布式監控以及集中的Web管理界面。被監控對象只要支持SNMP協議或者運行Zabbi

windows系統執行spark、hadoop報錯Could not locate executable null\bin\winutils.exe in the Hadoop binaries

1.下載 winutils.exe:https://download.csdn.net/download/u010020897/10745623 2.將此檔案放置在某個目錄下,比如C:\winutils\bin\中。 3.在程式的一開始宣告:System.s

Redis進階實踐之三如何在Windows系統安裝安裝Redis

Redis進階實踐之三如何在Windows系統上安裝安裝Redis 一、Redis的簡介         Redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括strin

windows系統用navicat連線遠端liunx系統的mysql資料庫

問題描述: 在ubuntu上裝了一個mysql為資料來源的hive資料庫,通過xshell連線操作沒有問題,我想在windows系統上使用工具連線,但是一直報Can’t connect to MySQL server on’XXXXX’的問題。 問題分析: 1.可能是網路不統 ,ping X

英文Windows系統開啟帶中文TXT出現亂碼

 很多在外企工作的小夥伴可能遇到過這種情況,Windows系統是英文版的,開啟中文的文件或者執行中文的程式時,中文都變成了亂碼。 這是由於大部分中文程式所使用的文字編碼與英文系統的文字編碼不同造成的。只需要將Windows的語言格式及Unicode改成中文就可以了。   以下步驟最後

設備唯一標識方法(Unique Identifier):如何在Windows系統獲取設備的唯一標識 zz

machine 安裝 ren 常用 安全 name system 需要 dmi 原文地址:http://www.vonwei.com/post/UniqueDeviceIDforWindows.html 唯一的標識一個設備是一個基本功能,可以擁有很多應

裝置唯一標識方法(Unique Identifier):如何在Windows系統獲取裝置的唯一標識 zz

原文地址:http://www.vonwei.com/post/UniqueDeviceIDforWindows.html          唯一的標識一個裝置是一個基本功能,可以擁有很多應用場景,比如軟體授權(如何保證你的軟體在授權後才能在特定機