windows मैक और विंडोज दोनों पर एक्सेल के साथ कौन सी एन्कोडिंग सीएसवी फाइलों को सही तरीके से खोलती है?




excel macos (12)

हमारे पास एक वेब ऐप है जो सीएसवी फाइलों को निर्यात करता है जिसमें यूटीएफ -8, नो बीओएम के साथ विदेशी पात्र होते हैं। विंडोज और मैक दोनों उपयोगकर्ताओं को एक्सेल में कचरा पात्र मिलते हैं। मैंने बीओएम के साथ यूटीएफ -8 में परिवर्तित करने की कोशिश की; एक्सेल / विन इसके साथ ठीक है, एक्सेल / मैक अस्पष्ट दिखाता है। मैं एक्सेल 2003 / विन, एक्सेल 2011 / मैक का उपयोग कर रहा हूं। मैंने कोशिश की सभी एन्कोडिंग यहां दी गई है:

Encoding  BOM      Win                            Mac
--------  ---      ----------------------------   ------------
utf-8     --       scrambled                      scrambled
utf-8     BOM      WORKS                          scrambled
utf-16    --       file not recognized            file not recognized
utf-16    BOM      file not recognized            Chinese gibberish
utf-16LE  --       file not recognized            file not recognized
utf-16LE  BOM      characters OK,                 same as Win
                   row data all in first field

बीओएम के साथ सबसे अच्छा यूटीएफ -16LE है, लेकिन सीएसवी इस तरह से पहचाना नहीं गया है। क्षेत्र विभाजक अल्पविराम है, लेकिन अर्धविराम चीजों को नहीं बदलता है।

क्या कोई एन्कोडिंग है जो दोनों दुनिया में काम करती है?


यूटीएफ -8 के साथ कोई बीओएम वर्तमान में एक्सेल मैक 2011 14.3.2 में मेरे लिए काम नहीं करता है।

यूटीएफ -8 + बीओएम प्रकार के काम, लेकिन बीओएम गिबर के रूप में प्रस्तुत किया।

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


आपने केवल अल्पविराम से अलग और अर्धविराम से अलग सीएसवी की कोशिश की है। यदि आपने टैब से अलग सीएसवी (जिसे टीएसवी भी कहा जाता है) की कोशिश की थी तो आपको जवाब मिल गया होगा:

बीओएम (बाइट ऑर्डर मार्क) के साथ यूटीएफ -16LE , टैब से अलग

लेकिन : एक टिप्पणी में आप उल्लेख करते हैं कि टीएसवी आपके लिए एक विकल्प नहीं है (हालांकि मैं इस प्रश्न को आपके प्रश्न में नहीं ढूंढ पाया है)। वह अफसोस की बात है। इसका अक्सर अर्थ है कि आप टीएसवी फाइलों के मैन्युअल संपादन की अनुमति देते हैं, जो शायद एक अच्छा विचार नहीं है। टीएसवी फाइलों की दृश्य जांच एक समस्या नहीं है। इसके अलावा संपादकों को टैब चिह्नित करने के लिए एक विशेष चरित्र प्रदर्शित करने के लिए सेट किया जा सकता है।

और हाँ, मैंने विंडोज और मैक पर यह कोशिश की।


मेरे मामले में यह काम करता है (मैक, एक्सेल 2011, चेक डायक्रिटिक्स के साथ सिरिलिक और लैटिन वर्ण दोनों):

  • वर्णसेट यूटीएफ -16LE (बस यूटीएफ -16 पर्याप्त नहीं था)
  • बीओएम "\ xFF \ xFE"
  • \ t (टैब) विभाजक के रूप में
  • विभाजक और सीआरएलएफ को भी एन्कोड करना न भूलें :-)
  • Mb_convert_encoding के बजाय iconv का उपयोग करें

मेरे मैक ओएस पर, टेक्स्ट रैंगलर ने "वेस्टर्न" एन्कोडिंग के रूप में एक्सेल के साथ बनाई गई एक CSV फ़ाइल की पहचान की।

कुछ googling के बाद मैंने इस छोटी लिपि बनाई है (मुझे विंडोज़ उपलब्धता के बारे में निश्चित नहीं है, शायद Cygwin साथ?):

$ cat /usr/local/bin/utf8.sh

#!/bin/bash

INPUTFILE="$1"

iconv -f macroman -c -t UTF-8 $INPUTFILE |tr '\r' '\n' >/tmp/file.$$.csv

mv $INPUTFILE ms_trash
mv /tmp/file.$$.csv $INPUTFILE

सीएसवी के बजाय, एक्सएलएस एक्सटेंशन और "एप्लिकेशन / एक्सेल" माइम-टाइप के साथ एचटीएमएल आउटपुट करने का प्रयास कर रहा है। मुझे पता है कि यह विंडोज़ में काम करेगा, लेकिन मैकोज़ के लिए बात नहीं कर सकता


मैक 2011 और विंडोज एक्सेल 2002 के लिए Excel पर मेरे लिए निम्नलिखित काम किया:

  1. मैक पर iconv का उपयोग करके, फ़ाइल को यूटीएफ -16 लिटिल-एंडियन + नाम में बदलें * .txt (.txt एक्सटेंशन टेक्स्ट आयात विज़ार्ड चलाने के लिए Excel को मजबूर करता है):

    iconv -f UTF-8 -t UTF-16LE filename.csv >filename_UTF-16LE.csv.txt

  2. एक्सेल में फ़ाइल खोलें और टेक्स्ट आयात विज़ार्ड में चुनें:

    • चरण 1: फ़ाइल उत्पत्ति : इसे अनदेखा करें, इससे कोई फर्क नहीं पड़ता कि आप क्या चुनते हैं
    • चरण 2: Delimiters और पाठ योग्यता के लिए उचित मूल्य का चयन करें
    • चरण 3: यदि आवश्यक हो, तो कॉलम प्रारूप का चयन करें

पीएस यूटीएफ द्वारा निर्मित यूटीएफ -16LE में शुरुआत में बीओएम बाइट्स एफएफ एफई है।

पीपीएस मेरी मूल सीएसवी फ़ाइल विंडोज 7 कंप्यूटर पर, यूटीएफ -8 प्रारूप में (शुरुआत में बीओएम बाइट्स ईएफ बीबी बीएफ के साथ) बनाई गई थी और सीआरएलएफ लाइन ब्रेक का इस्तेमाल किया गया था। कोमा का उपयोग फील्ड डिलीमीटर और टेक्स्ट क्वालीफायर के रूप में एकल उद्धरण के रूप में किया गया था। इसमें एएससीआईआई अक्षरों और टिल्ड, उमलॉट इत्यादि के साथ-साथ कुछ सिरिलिक के साथ विभिन्न लैटिन अक्षरों को शामिल किया गया था। सभी Win और Mac के लिए Excel दोनों में ठीक से प्रदर्शित होते हैं।

पीपीपीएस सटीक सॉफ्टवेयर संस्करण:
* मैक ओएस एक्स 10.6.8
* मैक 2011 v.14.1.3 के लिए एक्सेल
* विंडोज सर्वर 2003 एसपी 2
* विंडोज एक्सेल 2002 v.10.2701.2625


मैक के लिए Excel 2011 में utf8-encoded CSV आयात करने पर क्लीनर यहां दिया गया है: माइक्रोसॉफ्ट का कहना है: "मैक के लिए एक्सेल वर्तमान में यूटीएफ -8 का समर्थन नहीं करता है।" मैक 2011 और यूटीएफ -8 के लिए एक्सेल

हाँ, एमएस जाने का रास्ता!


बीओएम के साथ यूटीएफ -16LE के लिए यदि आप कॉम के बजाय टैब अक्षरों को अपने डिलीमीटर के रूप में उपयोग करते हैं तो एक्सेल फ़ील्ड को पहचान लेगा। इसका कारण यह है कि एक्सेल वास्तव में अपने यूनिकोड * .txt पार्सर का उपयोग कर समाप्त होता है।

चेतावनी : अगर फ़ाइल एक्सेल में सहेजी गई है और सहेजी गई है, तो इसे टैब-सीमांकित ASCII के रूप में सहेजा जाएगा। समस्या यह है कि जब आप फ़ाइल को फिर से खोलते हैं तो Excel मानता है कि यह वास्तविक सीएसवी (अल्पविराम के साथ) है, यह देखता है कि यह यूनिकोड नहीं है, इसलिए इसे अल्पविराम के रूप में वर्णित करता है - और इसलिए इसका एक हैश बना देगा!

अद्यतन : उपर्युक्त चेतावनी आज मेरे लिए एक्सेल 2010 (विंडोज़) में दिखाई नहीं दे रही है, हालांकि व्यवहार को बचाने में कोई अंतर दिखता है यदि:

  • आप Excel को संपादित और छोड़ते हैं ('यूनिकोड * .txt' के रूप में सहेजने का प्रयास करते हैं)

की तुलना में:

  • फ़ाइल को संपादित करना और बंद करना (उम्मीद के अनुसार काम करता है)।

मेरे मामले में समस्या को हल करने के लिए प्रस्तावना जोड़ना मेरी समस्या हल:

var data = Encoding.UTF8.GetBytes(csv);
var result = Encoding.UTF8.GetPreamble().Concat(data).ToArray();
return File(new MemoryStream(result), "application/octet-stream", "data.csv");

ऐसा लगता है कि मैक ओएस के लिए एक्सेल 2011 एन्कोडिंग का उपयोग नहीं कर रहा है। गेट एन्कोडिंग ("10000") जैसा कि मैंने सोचा था और 2 दिनों के साथ बर्बाद कर दिया था, लेकिन माइक्रोसॉफ्ट ओएस के समान ही है। इसके लिए सबसे अच्छा सबूत एक्सेल 2011 में विशेष वर्णों के साथ मैक के लिए फ़ाइल बनाना है, इसे सीएसवी के रूप में सहेजें और फिर इसे मैक टेक्स्ट एडिटर में खोलें और वर्ण स्कैम्बल हो जाएं।

मेरे लिए यह दृष्टिकोण काम करता है - जिसका अर्थ है कि मैक ओएस पर एक्सेल 2011 पर सीएसवी निर्यात में विशेष पश्चिमी यूरोपीय अक्षर हैं:

Encoding isoMacOS = Encoding.GetEncoding("iso-8859-1");
Encoding defaultEncoding = Encoding.Default; 

// Convert the string into a byte array.
byte[] defaultEncodingBytes = defaultEncoding.GetBytes(exportText);

// Perform the conversion from one encoding to the other.
byte[] ansiBytes = Encoding.Convert(defaultEncoding, isoMacOS, defaultEncodingBytes);

decodedString = isoMacOS.GetString(ansiBytes);

जावा का उपयोग करके इसे हल करें (बीओएम के साथ यूटीएफ -16LE):

String csvReportStr = getCsvReport();
byte[] data = Charset.forName("UTF-16LE").encode(csvReportStr)
    .put(0, (byte) 0xFF)
    .put(1, (byte) 0xFE)
    .array();

ध्यान दें कि सीएसवी फ़ाइल को TAB को विभाजक के रूप में उपयोग करना चाहिए। आप विंडोज़ और मैक ओएस एक्स दोनों पर सीएसवी फ़ाइल पढ़ सकते हैं।

इसका संदर्भ लें: मैं बीओएम के साथ यूटीएफ -16LE बाइट एरे को एन्कोड / डीकोड कैसे करूं?


कम डाउनडाउन है: कोई समाधान नहीं है। एक्सेल 2011 / मैक एक सीएसवी फ़ाइल को सही ढंग से समझ नहीं सकता है जिसमें उमलॉट्स और डायक्रिटिकल अंक हैं, इससे कोई फर्क नहीं पड़ता कि आप क्या एन्कोडिंग या हॉप कूदते हैं। मुझे किसी को अलग बताने में खुशी होगी!





utf