दिलचस्प पोस्ट
लॉन्च असफल बाइनरी नहीं मिला ई के लिए ग्रहण सी में CPU पर Tensorflow चलाएं regex: कैसे बैकस्लैश और विशेष वर्ण से बचने के लिए? जावा: सूची को मानचित्र में कनवर्ट कैसे करें जावास्क्रिप्ट के माध्यम से छवि का औसत रंग प्राप्त करें क्या 8 दशमलव स्थानों के साथ अक्षांश / देशांतर के लिए MySQL डेटा प्रकार का उपयोग किया जाना चाहिए? रेल 3.0 में f.error_messages स्प्रिंग 4.2.3 और तेज xml जैक्सन 2.7.0 असंगत हैं एक 64-बिट सिस्टम (जीएनयू टूलचैन) पर 32-बिट बायनेरिज़ को इकट्ठा करना एक NSView के लिए पृष्ठभूमि का रंग बदलने का सबसे अच्छा तरीका NHibernate सत्र का जीवनकाल क्या होना चाहिए? स्ट्रिंग से केवल संख्याएं प्राप्त करने की क्वेरी एक पीडीएफ जेनरेट करें जो स्वचालित रूप से प्रिंट करता है MySQL क्लाइंट को MySQLdb के साथ पुन: कनेक्ट करने के लिए कैसे सक्षम करें? मैं डीजेंगो में इस दौड़ की स्थिति से कैसे निपटूं?

मैं PHP में कैसे एक UTF-8 सीएसवी आउटपुट कर सकता हूं जो Excel ठीक से पढ़ा जाएगा?

मुझे यह बहुत ही सरल चीज मिली है जो सीएसवी प्रारूप में कुछ सामान का उत्पादन करता है, लेकिन इसे यूटीएफ -8 होना चाहिए मैं TextEdit या TextMate या Dreamweaver में इस फाइल को खोलता हूं और यह यूटीएफ -8 अक्षरों को ठीक से प्रदर्शित करता है, लेकिन अगर मैं इसे एक्सेल में खोलता हूं तो यह इस मूर्खतापूर्ण चीज़ के बजाय इसके बजाय मेरे दस्तावेज़ के शीर्ष पर मेरे पास क्या है:

header("content-type:application/csv;charset=UTF-8"); header("Content-Disposition:attachment;filename=\"CHS.csv\""); 

ऐसा लगता है कि एक्सेल (मैक, 2008) को छोड़कर वांछित प्रभाव को ठीक से आयात नहीं करना है। एक्सेल में मेरे लिए "यूटीएफ -8 के रूप में खुला" या कुछ भी नहीं है, इसलिए … मुझे थोड़ा नाराज़ हो रहा है।

मैं इस तरह के किसी भी स्पष्ट समाधान कहीं भी नहीं मिल सकता है, बहुत से लोगों को एक ही समस्या होने के बावजूद। जिस चीज़ को मैं सबसे ज्यादा देख रहा हूं वह बम को शामिल करना है, लेकिन मैं यह नहीं जान सकता कि यह कैसे करना है। जैसा कि आप ऊपर देख सकते हैं मैं सिर्फ इस डेटा को echo हूं, मैं कोई भी फाइल नहीं लिख रहा हूं। मैं ऐसा कर सकता हूं अगर मुझे इसकी आवश्यकता होती है, तो मैं सिर्फ इसलिए नहीं हूं क्योंकि इस बिंदु पर इसकी आवश्यकता नहीं होती है। कोई मदद?

अद्यतन: मैंने echo pack("CCC", 0xef, 0xbb, 0xbf); को echo pack("CCC", 0xef, 0xbb, 0xbf); रूप में echo pack("CCC", 0xef, 0xbb, 0xbf); की कोशिश की echo pack("CCC", 0xef, 0xbb, 0xbf); जो मैंने एक साइट से निकाला था जो BOM का पता लगाने की कोशिश कर रहा था। लेकिन एक्सेल सिर्फ उन तीन पात्रों को पहली बार पेश करता है जब यह आयात करता है, और फिर भी विशेष वर्णों को खराब करता है

Solutions Collecting From Web of "मैं PHP में कैसे एक UTF-8 सीएसवी आउटपुट कर सकता हूं जो Excel ठीक से पढ़ा जाएगा?"

माइक्रोसॉफ्ट समर्थन इंजीनियर का हवाला देते हुए,

मैक के लिए Excel वर्तमान में यूटीएफ -8 का समर्थन नहीं करता है

अपडेट, 2017 : Office 2016 के पहले मैक के लिए Microsoft Excel के सभी संस्करणों में यह सच है नए संस्करण (Office 365 से) अब यूटीएफ -8 का समर्थन करते हैं

UTF-8 सामग्री को आउटपुट करने के लिए कि एक्सेल दोनों को Windows और OS X पर सफलतापूर्वक पढ़ सकेंगे, आपको दो चीजों को करने की आवश्यकता होगी:

  1. सुनिश्चित करें कि आप UTF-16LE को अपना UTF-8 टेक्स्ट कन्वर्ट करते हैं

     mb_convert_encoding($csv, 'UTF-16LE', 'UTF-8'); 
  2. सुनिश्चित करें कि आप UTF-16LE बाइट क्रम चिह्न जोड़ते हैं

     chr(255) . chr(254) 

अगली समस्या जो ओएस एक्स (लेकिन विंडोज़ नहीं ) पर एक्सेल पर दिखाई देती है जब सीएसएवी फाइल को अल्पविराम द्वारा अलग किए गए मानों को देखते हुए, Excel केवल एक पंक्ति के साथ पंक्तियां और पहली पंक्ति में कॉमा के साथ सभी पाठ को रेंडर करेगा

इस से बचने का तरीका आपके पृथक मूल्य के रूप में टैब का उपयोग करना है।

मैंने इस फ़ंक्शन को PHP टिप्पणियों से उपयोग किया था (कॉमा के बजाय टैब "\ t" का उपयोग करके) और यह ओएस एक्स और विंडोज एक्सेल पर पूरी तरह से काम किया है।

ध्यान दें कि एक पंक्ति के अंत के रूप में एक खाली कॉलम के साथ किसी समस्या को ठीक करने के लिए, मुझे उस कोड की लाइन को बदलना होगा जो कहता है:

  $field_cnt = count($fields); 

सेवा मेरे

  $field_cnt = count($fields)-1; 

इस पृष्ठ पर अन्य कुछ टिप्पणियों के मुताबिक, अन्य स्प्रेडशीट ऐप्स जैसे ओपनऑफिस कैल्क, ऐप्पल की खुद की संख्या और Google डॉक की स्प्रेडशीट को यूएफ़एफ -8 फाइलों के साथ अल्पविराम के साथ कोई समस्या नहीं है।

एक्सेल में यूनिकोड सीएसवी फाइलों के लिए क्या काम करता है और काम नहीं करता इस प्रश्न में तालिका देखें


एक साइड नोट के रूप में, मैं जोड़ सकता हूं कि यदि आप संगीतकार का उपयोग कर रहे हैं, तो आपको League\Csv को अपनी आवश्यकता के अनुसार जोड़ना चाहिए। League\Csv फाइलें बनाने के लिए League\Csv का वास्तव में अच्छा एपीआई है

League\Csv फाइल बनाने की इस पद्धति के साथ League\Csv उपयोग करने के लिए, इस उदाहरण को देखें

मेरे पास समान (या समान) समस्या है

मेरे मामले में, अगर मैं आउटपुट में बीओएम जोड़ता हूं, तो यह काम करता है:

 header('Content-Encoding: UTF-8'); header('Content-type: text/csv; charset=UTF-8'); header('Content-Disposition: attachment; filename=Customers_Export.csv'); echo "\xEF\xBB\xBF"; // UTF-8 BOM 

मेरा मानना ​​है कि यह एक बहुत बदसूरत हैक है, लेकिन यह मेरे लिए काम किया है, कम से कम Excel 2007 के लिए Windows यकीन नहीं है कि यह मैक पर काम करेगा

यहां बताया गया है कि मैंने इसे कैसे किया (सीएसवी फ़ाइल डाउनलोड करने के लिए ब्राउज़र को प्रॉम्प्ट करना है):

 header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=file.csv'); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); echo "\xEF\xBB\xBF"; // UTF-8 BOM echo $csv_file_content; exit(); 

सीएसवी पूर्वावलोकन में यूटीएफ 8 एन्कोडिंग समस्या तय करने वाली बात केवल जब आप मैक पर स्पेस बार मारा करते हैं .. लेकिन Excel मैक 2008 में नहीं … पता नहीं क्यों

मैं सिर्फ एक ही समस्या से निपटा, और दो समाधान के साथ आया था

  1. Bpeterson76 द्वारा सुझाए गए अनुसार PHPExcel वर्ग का उपयोग करें

    • इस वर्ग का उपयोग करने के लिए सबसे व्यापक रूप से संगत फ़ाइल उत्पन्न करता है, मैं यूटीएफ -8 एन्कोडेड डेटा से एक फ़ाइल जेनरेट करने में सक्षम था जो Excel 2008 मैक, एक्सेल 2007 विंडोज़ और Google डॉक्स में ठीक खोला गया था।
    • PHPExcel का प्रयोग करने में सबसे बड़ी समस्या यह है कि यह धीमा है और बहुत मेमोरी का उपयोग करता है, जो उचित आकार की फाइलों के लिए कोई समस्या नहीं है, लेकिन अगर आपकी Excel / CSV फ़ाइल में सैकड़ों या हजारों पंक्तियाँ हैं, तो यह लाइब्रेरी व्यर्थ हो जायेगी
    • यहां एक PHP विधि है जो कुछ टीएसवी डेटा लेती है और ब्राउज़र को एक्सेल फ़ाइल का उत्पादन करती है, ध्यान दें कि यह Excel5 राइटर का उपयोग करता है, जिसका अर्थ है कि फ़ाइल Excel के पुराने संस्करणों के साथ संगत होना चाहिए, लेकिन मेरे पास अब तक किसी भी एक्सेस नहीं है, इसलिए मैं उन्हें परीक्षण नहीं कर सकता।

       function excel_export($tsv_data, $filename) { $export_data = preg_split("/\n/", $tsv_data); foreach($export_data as &$row) { $row = preg_split("/\t/", $row); } include("includes/PHPExcel.php"); include('includes/PHPExcel/Writer/Excel5.php'); $objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0); $sheet = $objPHPExcel->getActiveSheet(); $row = '1'; $col = "A"; foreach($export_data as $row_cells) { if(!is_array($row_cells)) { continue; } foreach($row_cells as $cell) { $sheet->setCellValue($col.$row, $cell); $col++; } $row += 1; $col = "A"; } $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="'.$filename.'.xls"'); header('Cache-Control: max-age=0'); $objWriter->save('php://output'); exit; } 
  2. PHPExcel के साथ दक्षता के मुद्दों के कारण, मुझे यह पता लगाना था कि यूटीएफ -8 और एक्सेल संगत सीएसवी या टीएसवी फ़ाइल कैसे उत्पन्न करें।

    • सबसे अच्छा मैं एक फाइल थी जो Excel 2008 मैक और एक्सेल 2007 पीसी के साथ संगत थी, लेकिन Google डॉक्स, जो कि मेरे आवेदन के लिए काफी अच्छा है।
    • मुझे यहां समाधान मिला, विशेष रूप से, यह उत्तर , लेकिन आपको स्वीकार किए गए उत्तर भी पढ़ना चाहिए क्योंकि यह समस्या समझाती है।
    • यहाँ मैं उपयोग किया PHP कोड है, ध्यान दें कि मैं tsv डेटा का उपयोग कर रहा हूँ (टैब के बजाय सीमांकक के रूप में):

       header ( 'HTTP/1.1 200 OK' ); header ( 'Date: ' . date ( 'DM j G:i:s TY' ) ); header ( 'Last-Modified: ' . date ( 'DM j G:i:s TY' ) ); header ( 'Content-Type: application/vnd.ms-excel') ; header ( 'Content-Disposition: attachment;filename=export.csv' ); print chr(255) . chr(254) . mb_convert_encoding($tsv_data, 'UTF-16LE', 'UTF-8'); exit; 

Excel UTF-8 का समर्थन नहीं करता आपको अपने UTF-8 पाठ को UCS-2LE में सांकेतिक शब्दों में बदलना होगा

 mb_convert_encoding($output, 'UCS-2LE', 'UTF-8'); 

मुझे एक ही समस्या थी और इसे नीचे की तरह हल किया गया था:

  header('Content-Encoding: UTF-8'); header('Content-Type: text/csv; charset=utf-8' ); header(sprintf( 'Content-Disposition: attachment; filename=my-csv-%s.csv', date( 'dmY-His' ) ) ); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); $df = fopen( 'php://output', 'w' ); //This line is important: fputs( $df, "\xEF\xBB\xBF" ); // UTF-8 BOM !!!!! foreach ( $rows as $row ) { fputcsv( $df, $row ); } fclose($df); exit(); 

इस पर अनुसरण करने के लिए:

ऐसा प्रतीत होता है कि समस्या केवल मैक पर एक्सेल के साथ है ऐसा नहीं है कि मैं कैसे फाइलें उत्पन्न कर रहा हूं, क्योंकि एक्सेल से सीएसवी भी उत्पन्न करना उन्हें तोड़ रहा है मैं सीएसवी के रूप में सहेजता हूं, और फिर से आयात करता हूं, और सभी अक्षर गड़बड़ कर रहे हैं।

इसलिए … इस बात का सही उत्तर नहीं दिखता है सभी सुझावों के लिए शुक्रिया।

मैं कहूंगा कि मैंने जो भी पढ़ा है, @ दानियल मैगिलिला के बारे में बीओएम के सुझाव शायद किसी अन्य कंप्यूटर के लिए सबसे अच्छा जवाब होगा। लेकिन यह अभी भी मेरी समस्या को हल नहीं करता है

सीएसवी फ़ाइल संगीत में बाइट ऑर्डर मार्क शामिल है

या जैसा सुझाव दिया गया है और समाधान केवल यह एचटीटीपी बॉडी के साथ गूंजता है

चूंकि यूटीएफ 8 एन्कोडिंग एक्सेल के साथ अच्छी तरह से नहीं खेलता है। आप डेटा को दूसरे एन्कोडिंग प्रकार में परिवर्तित कर सकते हैं iconv()

जैसे

 iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $value), 

जोड़ें:

 fprintf($file, chr(0xEF).chr(0xBB).chr(0xBF)); 

या:

 fprintf($file, "\xEF\xBB\xBF"); 

सीएसवी फ़ाइल में कोई भी सामग्री लिखने से पहले।

उदाहरण:

 <?php $file = fopen( "file.csv", "w"); fprintf( $file, "\xEF\xBB\xBF"); fputcsv( $file, ["english", 122, "বাংলা"]); fclose($file); 

जैसा कि मैंने जांच की और मुझे पता चला कि यूटीएफ -8 मैक और विंडोज पर अच्छी तरह से काम नहीं कर रहा है, इसलिए मैंने विंडोज -1252 के साथ कोशिश की, यह उन दोनों पर अच्छी तरह से समर्थन करता है लेकिन आपको उबुंटू पर एन्कोडिंग का प्रकार चुनना होगा यहां मेरा कोड $valueToWrite = mb_convert_encoding($value, 'Windows-1252');

 $response->headers->set('Content-Type', $mime . '; charset=Windows-1252'); $response->headers->set('Pragma', 'public'); $response->headers->set('Content-Endcoding','Windows-1252'); $response->headers->set('Cache-Control', 'maxage=1'); $response->headers->set('Content-Disposition', $dispositionHeader); echo "\xEF\xBB\xBF"; // UTF-8 BOM 

कैसे ही Excel के लिए outputting के बारे में ही? यह एक उत्कृष्ट वर्ग है जो आपको XLS फाइल सर्वर-साइड उत्पन्न करने की अनुमति देता है। मैं उन ग्राहकों के लिए अक्सर इसका उपयोग करता हूं जो "सीएसवी" का पता नहीं लगा सकते हैं और अब तक कभी भी शिकायत नहीं हुई है यह कुछ अतिरिक्त स्वरूपण (छायांकन, पंक्ति-पंक्ति, गणना, आदि) को भी अनुमति देता है जो कि सीएसवी कभी नहीं करेगा।

आप iconv के साथ अपना सीएसवी स्ट्रिंग परिवर्तित कर सकते हैं। उदाहरण के लिए:

 $csvString = "Möckmühl;in Möckmühl ist die Hölle los\n"; file_put_contents('path/newTest.csv',iconv("UTF-8", "ISO-8859-1//TRANSLIT",$csvString) ); 

आपको एन्कोडिंग "Windows-1252" का उपयोग करना होगा

 header('Content-Encoding: Windows-1252'); header('Content-type: text/csv; charset=Windows-1252'); header("Content-Disposition: attachment; filename={$filename}"); 

हो सकता है कि आपको अपना तार परिवर्तित करना होगा:

 private function convertToWindowsCharset($string) { $encoding = mb_detect_encoding($string); return iconv($encoding, "Windows-1252", $string); } 

मेरे लिए ऊपर समाधान का कोई भी काम नहीं किया। इस मुद्दे को हल करने के लिए मैंने नीचे किया है: PHP कोड में इस फ़ंक्शन का उपयोग करके मान को संशोधित करें:

 $value = utf8_encode($value); 

यह आउटपुट एक Excel पत्रक में ठीक से मानता है

यह दोनों विंडोज और मैक ओएस दोनों के लिए एक्सेल में ठीक काम करता है

// एक्सेल में फिक्स के मुद्दे जो डायएक्रिटिक्स, साइरिलिक अक्षर, ग्रीक अक्षर और मुद्रा प्रतीकों वाले अक्षर प्रदर्शित नहीं कर रहे हैं।

 function writeCSV($fileprefix, $headings, $data) { //Use tab as field separator $newTab = "\t"; $newLine = "\n"; $fputcsv = count($headings) ? '"'. implode('"'.$newTab.'"', $headings).'"'.$newLine : ''; // Loop over the * to export if (! empty($data)) { foreach($data as $item) { $fputcsv .= '"'. implode('"'.$newTab.'"', $item).'"'.$newLine; } } //Convert CSV to UTF-16 $encoded_csv = mb_convert_encoding($fputcsv, 'UTF-16LE', 'UTF-8'); // Output CSV-specific headers header('Set-Cookie: fileDownload=true; path=/'); //This cookie is needed in order to trigger the success window. header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private",false); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"$filename.csv\";" ); header("Content-Transfer-Encoding: binary"); header('Content-Length: '. strlen($encoded_csv)); echo chr(255) . chr(254) . $encoded_csv; //php array convert to csv/excel exit; } 

मुझे यह वही समस्या थी जब मेरे पास एक एक्सेल VBA रूटीन था जो आयातित डेटा था। चूंकि सीएसवी एक सादा पाठ प्रारूप है, इसलिए मैं इसे प्रोग्रामेटिक रूप से वर्डपैड जैसे एक सरल फ़ाइल संपादक में खोलकर और यूनिकोड पाठ के रूप में पुनः सहेज कर, या वहां से क्लिपबोर्ड पर कॉपी करके इसे एक्सेल में चिपकाकर काम कर रहा था। यदि एक्सेल स्वतः सीएसवी को कोशिकाओं में पार्स नहीं करता है, तो यह आसानी से "टेक्स्ट टू कॉलम" फीचर में बनाया गया है।

क्या समस्या तब भी होती है जब आप इसे एक .txt फ़ाइल के रूप में सहेजते हैं और उन्हें एक सीमांकक के रूप में अल्पविराम से एक्सेल करते हैं?

समस्या एन्कोडिंग बिल्कुल नहीं हो सकती है, यह हो सकता है कि एक्सेल मानकों के अनुसार यह फ़ाइल सही सीएसवी नहीं है।

यह पोस्ट काफी पुरानी है, लेकिन कोशिश करने के कुछ घंटों के बाद मैं अपना समाधान साझा करना चाहता हूं … हो सकता है कि यह किसी को एक्सेल और मैक और सीएसवी से निपटने में मदद करता है और इस खतरे के ऊपर ठोकर खा रहा है। मैं एक्सेल उपयोगकर्ताओं के साथ डेटाबेस से आउटपुट के रूप में गतिशील रूप से एक सीएसवी उत्पन्न कर रहा हूं। (बीओएम के साथ यूटीएफ -8)

मैंने बहुत सारे आइकॉन्स की कोशिश की, लेकिन मैक एक्सेल 2004 में जर्मन अम्लॉट्स काम नहीं कर सके। एक समाधान: PHPExcel यह महान है, लेकिन मेरी परियोजना के लिए थोड़ा बहुत ज्यादा है मेरे लिए क्या काम करता है सीएसवी फ़ाइल बना रहा है और इस सीएसवी फ़ाइल को इस PHPsnippet के साथ एक्सएल में परिवर्तित करें: csv2xls परिणाम xls एक्सेल जर्मन umlauts (ä, ö, Ü, …) के साथ काम करता है।

मैंने इन शीर्षलेखों की कोशिश की और विशेष वर्णों के साथ सीएसवी फाइल को सही ढंग से आयात करने के लिए विंडोज 7 पीसी पर एक्सेल 2013 प्राप्त किया। बाइट ऑर्डर मार्क (बीओएम) अंतिम कुंजी थी जिसने इसे काम किया था


     हैडर ('सामग्री-एन्कोडिंग: यूटीएफ -8');
     शीर्ष लेख ('सामग्री-प्रकार: पाठ / सीएसवी; वर्णसेट = यूटीएफ -8');
     शीर्ष लेख ("सामग्री-स्वभाव: अनुलग्नक; फ़ाइल नाम = filename.csv");
     शीर्षलेख ("प्रागमा: सार्वजनिक");
     शीर्षलेख ("समाप्ति: 0");
     गूंज "\ xEF \ xBB \ xBF";  // यूटीएफ -8 बीओएम

निर्यात करने से पहले आप फाइल में 3 बाइट जोड़ सकते हैं, यह मेरे लिए काम करता है ऐसा करने से पहले सिस्टम केवल विंडोज और एचपी -यूएक्स में काम करता है लेकिन लिनक्स में विफल रहता है।

 FileOutputStream fStream = new FileOutputStream( f ); final byte[] bom = new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF }; OutputStreamWriter writer = new OutputStreamWriter( fStream, "UTF8" ); fStream.write( bom ); 

फ़ाइल की शुरुआत में एक UTF-8 BOM (3 बाइट्स, हेक्स ईएफ बीबी बीएफ) है। अन्यथा एक्सेल आपके लोकेल की डिफ़ॉल्ट एन्कोडिंग (जैसे cp1252) के बजाय यूटएफ -8 के अनुसार डेटा की व्याख्या करेगा

एक्सेल के लिए सीएसवी फ़ाइल जनरेट करना, मूल्य के अंदर एक नई लाइन कैसे है

अन्यथा आप निम्न कर सकते हैं:

 header("Content-type: application/x-download"); header("Content-Transfer-Encoding: binary"); header("Content-disposition: attachment; filename=".$fileName.""); header("Cache-control: private"); echo utf8_decode($output); 

mb_convert_encoding का उपयोग करके पहले से ही utf-8 एन्कोडेड पाठ परिवर्तित करने की आवश्यकता नहीं है। बस मूल सामग्री के सामने तीन अक्षर जोड़ें:

 $newContent = chr(239) . chr(187) . chr(191) . $originalContent 

मेरे लिए इसने सीएसवी फाइलों में विशेष वर्णों की समस्या का समाधान किया।

मैक एक्सेल 2008 के लिए आसान समाधान: मैंने कई बार इस समस्या से जूझना शुरू कर दिया था, लेकिन यह मेरा आसान सुधार था: Textwrangler में। Csv फ़ाइल को खोलें, जो आपके यूटीएफ -8 वर्ण को सही ढंग से खोलना चाहिए। अब नीचे की स्थिति पट्टी में "यूनिकोड (यूटीएफ -8)" से "वेस्टर्न (आईएसओ लैटिन 1)" फाइल फ़ॉर्मेट बदलकर फाइल सहेजें। अब अपने मैक एक्सेल 2008 में जाएं और फ़ाइल> आयात करें> सीडी चुनें> अपनी फ़ाइल ढूंढें> फ़ाइल का मूल चयन करें "विंडोज (एएनएसआई)" चुनें और यूटीएफ -8 के वीर का चयन सही ढंग से प्रदर्शित हो रहा है। कम से कम ये मेरे लिए करता है…

मैं इसका उपयोग करता हूं और यह काम करता है

 header('Content-Description: File Transfer'); header('Content-Type: text/csv; charset=UTF-16LE'); header('Content-Disposition: attachment; filename=file.csv'); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); // output headers so that the file is downloaded rather than displayed // create a file pointer connected to the output stream $output = fopen('php://output', 'w'); fputs( $output, "\xEF\xBB\xBF" ); // output the column headings fputcsv($output, array('Thông tin khách hàng đăng ký')); // fetch the data $setutf8 = "SET NAMES utf8"; $q = $conn->query($setutf8); $setutf8c = "SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'"; $qc = $conn->query($setutf8c); $setutf9 = "SET CHARACTER SET utf8"; $q1 = $conn->query($setutf9); $setutf7 = "SET COLLATION_CONNECTION = 'utf8_general_ci'"; $q2 = $conn->query($setutf7); $sql = "SELECT id, name, email FROM myguests"; $rows = $conn->query($sql); $arr1= array(); if ($rows->num_rows > 0) { // output data of each row while($row = $rows->fetch_assoc()) { $rcontent = " Name: " . $row["name"]. " - Email: " . $row["email"]; $arr1[]["title"] = $rcontent; } } else { echo "0 results"; } $conn->close(); // loop over the rows, outputting them foreach($arr1 as $result1): fputcsv($output, $result1); endforeach; 

मै मैक पर हूं, मेरे मामले में मुझे बस सेपरेटर को "sep=;\n" साथ निर्दिष्ट करना था और इस फाइल को यूटीएफ -16LE में इस तरह से एन्कोड करना पड़ा:

 $data = "sep=;\n" .mb_convert_encoding($data, 'UTF-16LE', 'UTF-8'); 

#output एक UTF-8 सीएसवी PHP में है कि Excel ठीक से पढ़ा जाएगा।

 //Use tab as field separator $sep = "\t"; $eol = "\n"; $fputcsv = count($headings) ? '"'. implode('"'.$sep.'"', $headings).'"'.$eol : ''; 
 //convert UTF-8 file without BOM to UTF-16LE for excel on mac $fileUtf8String = file_get_contents("file.ext"); file_put_contents("file.ext", "\xFF\xFE" . mb_convert_encoding($fileUtf8String, "UTF-16LE", "UTF-8"));