2009-05-17 6 views
5

अगर मैं लिखने का समर्थन नहीं का नाम बदलें:बहु-बाइट वर्ण

rename('php109.tmp','test.jpg'); 

तो यह ठीक है और काम कर रहा है।

लेकिन अगर मैं इसे में बदलने के लिए:

rename('php109.tmp','中文.jpg'); 

यह

"ऐसा कोई फ़ाइल या निर्देशिका ..." रिपोर्ट करेंगे।

लेकिन यदि बहु-बाइट वर्ण डेटाबेस में लिखे जा सकते हैं तो पढ़ा जा सकता है, फिर इसका नाम बदलने पर विफल क्यों होता है?

+0

क्या आपका ऑपरेटिंग सिस्टम या फाइल सिस्टम बहु-बाइट फ़ाइल नामों का समर्थन करता है? – garrow

+0

हाँ, और यहां अधिक जानकारी है: इसे वेब पेज से सबमिट करते समय संभाला जाता है, पृष्ठ एन्कोडिंग utf8 डीबी एन्कोडिंग utf8 है। और मैंने स्ट्रिंग को केवल यह भी ढूंढने के लिए छोड़ दिया कि यह भी utf8 – omg

+0

आप किस ओएस का उपयोग कर रहे हैं? मैंने फ्रीबीएसडी 4.11, डेबियन 5.0, और ओएस एक्स 10.6.2 पर इसका कोई परीक्षण नहीं किया है। यदि आप किसी प्रकार की सिस्कोल ट्रेस सुविधा के साथ ओएस का उपयोग कर रहे हैं, तो क्या आप इसे सक्षम करने का प्रयास कर सकते हैं? –

उत्तर

-1

मुझे लगभग यकीन है कि mbstring के पास इस विशिष्ट समस्या से कोई लेना देना नहीं है, मुझे लगता है कि यहां समस्या आपकी .php फ़ाइल के एन्कोडिंग पर निर्भर करती है।

फ़ाइल के एन्कोडिंग को आपके कोड संपादक में यूटीएफ -8 (कोई बीओएम!) में बदलने का प्रयास करें।

+0

लेकिन फ़ाइल पहले से ही utf8 एन्कोड किया गया है .. – omg

0

फ़ाइल सिस्टम यूटीएफ -8 का उपयोग नहीं करते हैं। उदाहरण के लिए, यह है कि क्या विकिपीडिया NTFS के बारे में कहते हैं:

NTFS नाम एन्कोडिंग के लिए 16-बिट मूल्यों (फ़ाइल नाम, स्ट्रीम नाम, सूचकांक नाम, आदि) के किसी भी क्रम अनुमति देता है। यह मतलब है UTF-16 कोड पॉइंट्स का समर्थन कर रहे, लेकिन फाइल सिस्टम जाँच नहीं पड़ता कि एक दृश्य वैध UTF-16 (यह कम मूल्यों के किसी भी क्रम की अनुमति देता है, यूनिकोड मानक में उन तक ही सीमित नहीं है)।

आपको वर्णमाला के बीच कनवर्ट करने के लिए iconv() का उपयोग करने की आवश्यकता हो सकती है।

0

क्या आपने यह सुनिश्चित करने के लिए कि स्थानीय स्थान सही ढंग से सेट किया गया है, setlocale(LC_ALL, array("es_ES.utf-8","[email protected]",'es_ES')); या जो भी आपका देश कोड है, करने का प्रयास किया?

यदि यह कॉल 'utf-8' के साथ कुछ वापस नहीं करता है, तो इसका मतलब है कि यह विफल रहा है और फिर वर्तमान लोकेल लौटाएगा।

0

इस नमूना को मदद करनी चाहिए, आपको अपना भाषा कोड पृष्ठ ढूंढना चाहिए और इसके साथ बदलें। मैं टेलो कोड कोड करता हूं और यह अरबी/फारसी नामों के लिए विंडोज़ में काम करता है:

$newname = iconv("utf-8", "cp1256","گچپژ"); 
echo rename("1.txt", $newname); 
संबंधित मुद्दे