মাইক্রোসফ্ট এক্সেল .csv ফাইলগুলিতে ডায়াক্রিটিক্স ম্যাঙ্গেল করে?


190

আমি প্রোগ্রামিয়ালি ডেটা (পিএইচপি 5.2 ব্যবহার করে) একটি .csv পরীক্ষার ফাইলে রফতানি করছি।
উদাহরণস্বরূপ ডেটা: Numéro 1(উচ্চারণকৃত নোটটি দেখুন)। তথ্যটি হ'ল utf-8(কোনও প্রম্পেন্ডড বিওএম নেই)।

আমি যখন এমএস এক্সেলে এই ফাইলটি খুলি তখন প্রদর্শিত হয় Numéro 1

আমি এটি কোনও পাঠ্য সম্পাদক (UltraEdit) এ খুলতে সক্ষম যা এটি সঠিকভাবে প্রদর্শন করে। UE চরিত্রটি হল রিপোর্ট decimal 233

আমি কীভাবে একটি .csv ফাইলে পাঠ্য ডেটা রফতানি করতে পারি যাতে এমএস এক্সেল এটিকে যথাযথভাবে রেন্ডার করে, অগ্রাধিকার হিসাবে আমদানি উইজার্ড বা অ-ডিফল্ট উইজার্ড সেটিংস ব্যবহার বাধ্যতামূলক না করে?


আমি আপনার বিওএম সমাধান সম্পর্কে আরও শুনতে আগ্রহী হব, কারণ আমি বিশ্বাস করি যে আমি "ইএফ বিবি বিএফ" চেষ্টা করেছি যা আমার পক্ষে কার্যকর হয়নি।
জেমস বাকের 18

3
কাজের সমাধানটি বেছে নেওয়া হল: * একটি বিওএম অন্তর্ভুক্ত করা; utf-8 * এই শিরোনামটি ব্যবহার করুন: 'সামগ্রী-প্রকার: পাঠ্য / প্লেইন; চরসেট = utf-8 'এক্সেল 2003 এবং এক্সেল 2007-এ এটি "কাজ করেছে" যেখানে কাজ করা = কোনও আমদানি উইজার্ড ছাড়াই খোলা হয়েছে এবং সঠিকভাবে রচনা ডায়াক্রিটিক্সকে সঠিকভাবে দেওয়া হয়েছে। আমি যাচাই করিনি যে বিওএম প্রয়োজনীয় ছিল।
ফ্রেডডো 411

2
বিওএম প্রয়োজনীয়, আমি এখন এটি পরীক্ষা করেছি। এটি ছাড়া বিশেষ অক্ষরগুলি ঠিকঠাক রেন্ডার করে না।
অ্যালেক্স সিমিনিয়ান

2
যদি কেউ কোনও বিওএম যুক্ত করতে (বাইট-অর্ডার চিহ্নিতকারী) সম্পর্কে আরও কিছু বলতে পারে তবে এটি পছন্দ করবে। আমি যদি রেসপন্সের মতো কিছু করি তবে
রাইট

সিডনিওস: ফার্গাল যেমন নীচে বলেছেন; আপনার স্ট্রিংয়ে end uFEFF প্রস্তুত করুন।
noocyte

উত্তর:


243

সঠিকভাবে ফর্ম্যাটেড ইউটিএফ 8 ফাইলের প্রথম তিনটি অক্টেট হিসাবে একটি বাইট অর্ডার চিহ্ন থাকতে পারে । এগুলি হেক্স মান 0xEF, 0xBB, 0xBF। এই octets ফাইলটি ইউটিএফ 8 হিসাবে চিহ্নিত করতে পরিবেশন করে (যেহেতু তারা "বাইট অর্ডার" তথ্য হিসাবে প্রাসঙ্গিক নয়)। 1 যদি এই বিওএমটি বিদ্যমান না থাকে তবে গ্রাহক / পাঠক পাঠকের এনকোডিং প্রকারটি নির্ধারণ করতে রেখে যান। ইউটিএফ 8 সক্ষম নয় এমন পাঠকরা উইন্ডোজ -1222 এর মতো কিছু অন্যান্য এনকোডিং হিসাবে বাইটগুলি পড়বেন এবং ফাইলটির শুরুতে অক্ষরগুলি প্রদর্শন করবেন ।

একটি পরিচিত বাগ রয়েছে যেখানে এক্সেল, ফাইল অ্যাসোসিয়েশনের মাধ্যমে ইউটিএফ 8 সিএসভি ফাইল খোলার পরে ধরে নিয়েছে যে তারা ইউটিএফ 8 বিওমের উপস্থিতি উপেক্ষা করে একটি একক বাইট এনকোডিংয়ে রয়েছে । এটি কোনও সিস্টেমের ডিফল্ট কোডপেজ বা ভাষা সেটিং দ্বারা স্থির করা যায় না । বিওএম এক্সেলের মধ্যে ক্লু করবে না - এটি ঠিক কাজ করবে না। (একটি সংখ্যালঘু প্রতিবেদনে দাবি করা হয়েছে যে বিওএম কখনও কখনও "আমদানি পাঠ্য" উইজার্ডকে ট্রিগার করে)) এক্সেল 2003 এবং এর আগেও এই বাগটি উপস্থিত ছিল। বেশিরভাগ প্রতিবেদন (এখানে উত্তরগুলির মধ্যে) বলে যে এটি এক্সেল 2007 এবং আরও নতুনতে স্থির হয়েছে।

নোট করুন যে আপনি সর্বদা * "আমদানি পাঠ্য" উইজার্ডটি এক্সেলের মাধ্যমে ইউটিএফ 8 সিএসভি ফাইলগুলি যথাযথভাবে খুলতে পারেন যা আপনাকে যে ফাইলটি খোলছে তার এনকোডিং নির্দিষ্ট করতে দেয়। অবশ্যই এটি অনেক কম সুবিধাজনক।

এই উত্তরের পাঠকরা সম্ভবত এমন পরিস্থিতিতে পড়েন যেখানে তারা বিশেষত এক্সেল <2007 সমর্থন করে না তবে তারা এক্সেলকে কাঁচা ইউটিএফ 8 পাঠাচ্ছে, যা এটির ভুল ব্যাখ্যা করে এবং আপনার পাঠ্যটি Ãএবং অন্যান্য অনুরূপ উইন্ডোজ -১২২২ অক্ষরের সাথে ছিটিয়ে দিচ্ছে । ইউটিএফ 8 বিওএম যুক্ত করা সম্ভবত আপনার সেরা এবং দ্রুততম সমাধান।

আপনি যদি পুরানো এক্সেলগুলির ব্যবহারকারীদের সাথে আটকে থাকেন এবং এক্সেল আপনার সিএসভিগুলির একমাত্র উপভোক্তা হয় তবে আপনি ইউটিএফ 8 এর পরিবর্তে ইউটিএফ 16 রফতানি করে এটিকে ঘিরে কাজ করতে পারেন। এক্সেল 2000 এবং 2003 এগুলি সঠিকভাবে ডাবল-ক্লিক করুন। (অন্য কিছু পাঠ্য সম্পাদকদের ইউটিএফ 16 এ সমস্যা থাকতে পারে, তাই আপনাকে আপনার বিকল্পগুলি যত্ন সহকারে ওজন করতে হতে পারে))


* যখন আপনি পারবেন না, (কমপক্ষে) ম্যাকের আমদানি উইজার্ডের এক্সেল ২০১১ আসলে সবসময় সমস্ত এনকোডিং সহ কাজ করে না, আপনি যা বলবেন তা নির্বিশেষে। </anecdotal-version>> :)


14
এনকোডিংটি নির্দিষ্ট করার জন্য আমাকে চিরতরে নিয়ে গিয়েছিল। ডায়লগ> সরঞ্জাম বোতাম> ওয়েব বিকল্পগুলি> এনকোডিং ট্যাব সংরক্ষণ করুন। তারা নিশ্চিত যে এই জাতীয় গুরুত্বপূর্ণ জিনিসগুলি গোপনে ভাল।
ট্রায়ঙ্কো

6
ভুল: এক্সেল 2007 এ আমদানি উইজার্ডের প্রয়োজন ছাড়াই কোনও ফাইলকে সঠিকভাবে লোড করে এমন কোনও ইউটিএফ -8 ফাইলটিতে একটি বিওএম যুক্ত করা।
ভিক্টর নিকোললেট

3
আজ ভিক্টর যেভাবে বলেছে আমরা একই জিনিস পেয়েছি (এক্সেল 2010 ব্যবহার করে, এটি আমাদের কাছে যা ছিল কেবল তাই ছিল)। কোনও ইউটিএফ -8 বিওএম / সিগনেচার (ইএফ বিবি বিএফ) যুক্ত করা সিস্টেম ডিফল্ট এনকোডিং ব্যবহার করে ডাবল-ক্লিক সংশোধন করে এবং ইউটিএফ 8 সঠিকভাবে ব্যবহার করেছে :)
ড্যানি টুপেনি

20
সাধারণভাবে , কোনও ইউটিএফ-8-এনকোডযুক্ত ফাইলের বাইট অর্ডার চিহ্নটি চাপানো উচিত নয় । ইউটিএফ -8 এর ভেরিয়েবল বাইট অর্ডার নেই এবং এটি সেখানে ইউটিএফ -8 এর এএসসিআইআই সামঞ্জস্যতাটিকে নাশকতা করে। কিছু নির্দিষ্ট ফাইল ফর্ম্যাট রয়েছে যা হয় কোনও ইউটিএফ -8 ফ্যাক্স-বিওএমকে অনুমতি দেয় বা উত্সাহ দেয়, তবে অন্যথায় এড়ানো উচিত। সিএসভি সম্পূর্ণরূপে এনকোডিং-অজানা তাই কোনও প্রদত্ত সরঞ্জামটি বাইট সিকোয়েন্স 0xEF 0xBB 0xBF কে ইউটিএফ -8 এর সূচক হিসাবে ব্যাখ্যা করবে কিনা সে সম্পর্কে কারও অনুমান; প্রথম কক্ষে একটি অদৃশ্য নিয়ন্ত্রণ চরিত্র; প্রথম কক্ষে অক্ষর ; বা সম্পূর্ণ অন্য কিছু।
বোবিনস

3
@ আইয়ান: এটি কোনও বিওএম সহ ইউটিএফ -8 কেও নিশ্চিতভাবে জানে না - 0xEF 0xBB 0xBF বেশিরভাগ লিগ্যাসি এনকোডিংগুলিতেও একটি বৈধ ক্রম (তাই এটি প্রায়শই আইএসও -8859-1 বা সিপি 1252 হিসাবে প্রদর্শিত হয় এবং প্রদর্শিত হয় )। এটি কেবলমাত্র অ্যালগরিদমগুলি অনুমান করতে সহায়তা করে এবং ফাইল ফর্ম্যাটগুলির জন্য যা বিশেষত এর জন্য ভাতা দেয় (যেমন এক্সএমএল)। ইউটিএফ -8 ফাইলগুলিতে কোনও ভুয়া-বিওএম অন্তর্ভুক্ত করার ফলে আপনি তাদের ASCII- সামঞ্জস্যতা (ইউটিএফ -8 এর জন্য একটি মূল বিক্রয় কেন্দ্র) ভঙ্গ করছেন অনেকগুলি এনকোডিং-অজ্ঞ পাঠ্য সরঞ্জামগুলি একটি অপ্রত্যাশিত নেতৃস্থানীয় ভুল-বিওমের মুখোমুখি হবে।
ববিনস

39

একটি বিওএম প্রস্তুতি (\ uFEFF) আমার জন্য কাজ করেছে (এক্সেল 2007), সেই এক্সেলে ফাইলটি ইউটিএফ -8 হিসাবে স্বীকৃতি দিয়েছে। অন্যথায়, এটি সংরক্ষণ এবং আমদানি উইজার্ড ব্যবহার করে কাজ করে তবে এটি আদর্শ নয়।


1
এটি এখনও পাঠ্য আমদানি উইজার্ডটি খোলায়, তাই পার্থক্যটি হ'ল আপনি কেবল ডাবল ক্লিক করতে পারেন, তবে এখনও আদর্শ নয় তবে যাইহোক একমাত্র পরিচিত সমাধান।
haridsv

আমার জন্য, এক্সেল 2007 এর সাথে কোনও আমদানি উইজার্ড প্রদর্শিত হবে না
ভিক্টর নিকোললেট

আমার জন্য কোনও আমদানি উইজার্ডও নেই - এটি কোনও ইউটিএফ 8 বিওএম / স্বাক্ষর (ইএফ বিবি বিএফ) উপস্থিত থাকলে প্রত্যাশার মতো কাজ করে।
ড্যানি টুপেনি

এছাড়াও, \ufeffকোনও ইউটিএফ -16 (বিই) বিওএম কোনও ইউটিএফ -8 বিওএম নয়
অ্যালাস্টার ম্যাককর্ম্যাক

2
না, @ অ্যাস্টায়ারএমসি করম্যাক, এটি হয় কীভাবে এটি এনকোড করা হয়েছে তার উপর নির্ভর করে। ইউটিএফ -8 হিসাবে এনকোড হওয়া "fe ইউফেফ" হ'ল ইএফ বিবি বিএফ। (ইউটিএফ -16 হিসাবে এনকোড হওয়া এটি মাত্র দুটি বাইট হবে))
ডেভ বার্ট

30

মাইক্রোসফ্ট এক্সেল ব্যবহারকারীর কাছে পাঠানোর সময় আমি আমার প্রকল্পে পিএইচপি কোডটি ব্যবহার করি:

  /**
   * Export an array as downladable Excel CSV
   * @param array   $header
   * @param array   $data
   * @param string  $filename
   */
  function toCSV($header, $data, $filename) {
    $sep  = "\t";
    $eol  = "\n";
    $csv  =  count($header) ? '"'. implode('"'.$sep.'"', $header).'"'.$eol : '';
    foreach($data as $line) {
      $csv .= '"'. implode('"'.$sep.'"', $line).'"'.$eol;
    }
    $encoded_csv = mb_convert_encoding($csv, 'UTF-16LE', 'UTF-8');
    header('Content-Description: File Transfer');
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment; filename="'.$filename.'.csv"');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: '. strlen($encoded_csv));
    echo chr(255) . chr(254) . $encoded_csv;
    exit;
  }

আপডেট করা: ফাইলের নাম উন্নতি এবং BUG সঠিক দৈর্ঘ্যের গণনা স্থির করে। টিআরআইজি এবং @ আইভানহোয় 011 ধন্যবাদ


1
আমি এই পৃষ্ঠায় অন্যান্য বেশ কয়েকটি পরামর্শ চেষ্টা করেছি, তবে এটি আমার জন্য এক্সেল 2007-এ কাজ করেছিল The সর্বাধিক গুরুত্বপূর্ণ পরিবর্তনগুলি হ'ল কমাগুলির পরিবর্তে ট্যাব ব্যবহার করা (যদিও এটি একটি .csv ফাইল) এবং তারপরের দুটি রেখাটি অনুসরণ করে দুটি অক্ষর প্রতিধ্বনিত হয় mb_convert_encoding () এ কল করুন। এমবি_কভার্ট_এএনকোডিং () এর জন্য সমর্থন পেতে আমাকে -enable-mbstring দিয়ে পিএইচপি পুনরায় কম্পাইল করতে হয়েছিল। ধন্যবাদ!
রাসেল জি

1
এটি আমার জন্য খুব ভাল কাজ করেছে, ধন্যবাদ। যাইহোক, সাফারিতে আমি আমার কনসোলটিতে একটি ত্রুটি পেয়েছি 'রিসোর্সটি নথি হিসাবে ব্যাখ্যা করা হয়েছে তবে হিসাবে স্থানান্তরিত হয়েছে ...' আমার ধারণা এটি স্ট্রোকফ্লো / প্রশ্নগুলি / 3899426 / … বিচার করে এটি একটি ওয়েবকিট গণ্ডগোল , তবে সম্ভবত এটি নেই এবং / অথবা কারও কাছে রয়েছে একটি সমাধান খুঁজে পেয়েছি। তদুপরি, আপনার উদাহরণে আমি একটি পরিবর্তনের পরামর্শ দেব: 'Content-Disposition: attachment; filename="'.$filename.'.csv"'কারণ ফায়ারফক্স ডাবল উদ্ধৃতি চায়, নাহলে এটি কোনও স্থানের পরে আপনার ফাইলের নামটি কেটে ফেলবে।
কাসিমির

আপনি কেন সিএসভি ( text/csv) আউটপুট করছেন তবে এটিকে এক্সেল ( application/vnd.ms-excel) বলছেন ?
TRIG 12'13

2
এটি দুর্দান্ত কাজ করে! আমি নিশ্চিত করতে পারি যে এটি ম্যাকের সাথেও কাজ করছে (অফিসে ২০১১)।
জোনাথন

এই হওয়া উচিত নয় header('Content-Length: '. mb_strlen($encoded_csv, 'UTF-16LE'));?
ধনী ব্র্যাডশো

13

এক্সেল সংস্করণগুলির সমস্ত সংমিশ্রণের উত্তর (2003 + 2007) এবং ফাইলের ধরণ

এখানে বেশিরভাগ উত্তরগুলি কেবল তাদের এক্সেল সংস্করণকেই উদ্বেগ করে এবং অগত্যা আপনাকে সহায়তা করবে না কারণ তাদের উত্তরটি আপনার এক্সেলের সংস্করণে সঠিক হতে পারে না।

উদাহরণস্বরূপ, বিওএম অক্ষর যুক্ত করা স্বয়ংক্রিয় কলাম বিভাজক স্বীকৃতি নিয়ে সমস্যাগুলির পরিচয় দেয়, তবে প্রতিটি এক্সেল সংস্করণ নয়।

3 টি ভেরিয়েবল রয়েছে যা নির্ধারণ করে যে এটি সর্বাধিক এক্সেল সংস্করণে কাজ করে:

  • এনকোডিং
  • বিওএম চরিত্রের উপস্থিতি
  • ঘর বিভাজক

কেউ এসএপি-তে ত্রুটিযুক্ত প্রতিটি সংমিশ্রণ চেষ্টা করে ফলাফলটি রিপোর্ট করেছিল। শেষ ফলাফল? সর্বাধিক এক্সেল সংস্করণে এটি কাজ করার জন্য বিওএম এবং ট্যাব অক্ষরের সাথে ইউটিএফ 16le ব্যবহার করুন।

তুমি আমাকে বিশ্বাস করো না? আমি হয় না, তবে এখানে পড়তে এবং কাঁদতে চাই: http://wiki.sdn.sap.com/wiki/display/ABAP/CSV+tests+of+encoding+ এবং++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>


sep=,আপনি কেবল যুক্ত বা যা ব্যবহার করতে চান তা কেন না ? আপনি যদি ইতিমধ্যে বিওএম যোগ করে থাকেন তবে আমি ধরে নিই যে আপনি ফাইলটিতে স্টাফ যুক্ত করতে বিরত নন।
কেসি

ভাল, আসলে, আমার নিজের প্রশ্নের উত্তর দেওয়ার জন্য, আপনি ফিল্ড বিভাজক ঘোষণাটি যুক্ত করবেন না কারণ এটি এই কৌশলটি কাজ করা বন্ধ করে দেয়। সুতরাং মূলত এটি গার্ফড এনকোডিং বা আপনার ব্যবহারকারীদের যদি ভুল অঞ্চলের সেটিংস থাকে তবে আপনার ফাইলটি সিএসভি হিসাবে সঠিকভাবে ব্যাখ্যা করা হচ্ছে না।
কেসি

1
utf-16le + BOM (0xFF 0xFE) + ট্যাব সেরা
zhaozhi

10

আমদানি করার সময় ইউটিএফ -8 এনকন্ডিং নির্বাচন করুন। আপনি যদি অফিস 2007 ব্যবহার করেন তবে এটিই আপনি এটি পছন্দ করেছেন: ফাইলটি খোলার ঠিক পরে।


1
এটি দরকারী।
উইজার্ডকে

9

সিএসভি ডেটা আউটপুট দেওয়ার আগে ইকো ইউটিএফ -8 বিওএম। এটি উইন্ডোজের সমস্ত চরিত্রের সমস্যাগুলি সমাধান করে তবে ম্যাকের জন্য কার্যকর হয় না।

echo "\xEF\xBB\xBF";

এটি আমার পক্ষে কাজ করে কারণ আমার একটি ফাইল তৈরি করতে হবে যা কেবল উইন্ডোজ পিসিতে ব্যবহার করা হবে।


প্রতিটি ধরণের কলাম বিভাজক বা প্রতিটি এক্সেল সংস্করণের ক্ষেত্রে সত্য নয়। আমার উত্তর নীচে পড়ুন (এখন জন্য নীচে)।
ক্রিশ্চিয়ান ওয়েস্টারবিক

7

ইউটিএফ -8 অফিস 2007 সালে কোনও সার্ভিস প্যাক ছাড়াই, বিওএম সহ (ইউ + এফএফইফ বা 0xEF, 0xBB, 0xBF কাজ করে না, কাজ করে না) এসপি 3 ইনস্টল করে ইউটিএফ -8 কাজ করে যখন 0xEF, 0xBB, 0xBF বিওএম থাকে prepended।

ইউটিএফ -16 একটি 0xff 0xef বিওএম প্রিপেন্ডড দিয়ে "utf-16-le" ব্যবহার করে এবং পৃথক হিসাবে ট্যাব ব্যবহার করে অজগরকে এনকোড করার সময় কাজ করে। আমাকে ম্যানুয়ালি বিওএম লিখতে হয়েছিল, এবং তারপরে "utf-16-le" ব্যবহার করে তারপরে "utf-16" ব্যবহার করতে হবে, অন্যথায় প্রতিটি এনকোড () বিওএমকে লিখিত প্রতিটি সারিতে বিচ্ছিন্ন করে ফেলেছিল যা প্রথম কলামে আবর্জনা হিসাবে প্রদর্শিত হয়েছিল দ্বিতীয় লাইন এবং পরে।

ইউটিএফ -16 কোনও এসপি ইনস্টল না করে কাজ করবে কিনা তা বলতে পারি না, যেহেতু আমি এখন আর ফিরে যেতে পারছি না। দীর্ঘশ্বাস

এটি উইন্ডোতে রয়েছে, ম্যাকের জন্য অফিস সম্পর্কে ডান্নো।

উভয় ক্ষেত্রেই, ব্রাউজার থেকে সরাসরি ডাউনলোড শুরু করার সময় আমদানি কাজ করে এবং পাঠ্য আমদানি উইজার্ড হস্তক্ষেপ করে না, এটি আপনার প্রত্যাশার মতো কাজ করে।


ম্যাকের জন্য এক্সেল ২০১১ তেও কাজ করে।
আদম

আপনাকে আপনার পোস্টের জন্য ধন্যবাদ, আপনি অফিস 2007 এসপি 3 ইনস্টল না করলেও utf-16le ব্যবহার ঠিক আছে, তবে বিওএম 0xFF 0xFE হওয়া উচিত
zhaozhi

4

ফ্রেগেল যেমন বলেছিলেন \ uFEFF হ'ল উপায়।

<%@LANGUAGE="JAVASCRIPT" CODEPAGE="65001"%>
<%
Response.Clear();
Response.ContentType = "text/csv";
Response.Charset = "utf-8";
Response.AddHeader("Content-Disposition", "attachment; filename=excelTest.csv");
Response.Write("\uFEFF");
// csv text here
%>

1
আপনি যখন বিওএম ব্যবহার করেন তখন এক্সেল 2007 এ আপনার ট্যাব বিভাজকটিকে কীভাবে উপেক্ষা করা হবে তা কেবল দেখুন এবং দেখুন। আপনাকে আরও কিছু নিয়ে আসতে হবে।
ক্রিশ্চিয়ান ওয়েস্টারবিইক

3

আমি আরও লক্ষ্য করেছি যে কিছুক্ষণ আগে এই প্রশ্নের "উত্তর" দেওয়া হয়েছিল কিন্তু আমি গল্পগুলি বুঝতে পারি না যে আপনি টেক্সট উইজার্ডটি ব্যবহার না করে এক্সেল-এ কোনও utf8- এনকোডেড সিএসভি ফাইল সফলভাবে খুলতে পারবেন না।

আমার পুনরুত্পাদনযোগ্য অভিজ্ঞতা: Old MacDonald had a farm,ÈÌÉÍØনোটপ্যাডে টাইপ করুন, এন্টার টিপুন, তারপরে সংরক্ষণ করুন (ইউটিএফ -8 বিকল্পটি ব্যবহার করে)।

পাইথন ব্যবহার করে সেখানে কী আছে তা দেখানোর জন্য:

>>> open('oldmac.csv', 'rb').read()
'\xef\xbb\xbfOld MacDonald had a farm,\xc3\x88\xc3\x8c\xc3\x89\xc3\x8d\xc3\x98\r\n'
>>> ^Z

ভাল. নোটপ্যাড একটি বিওএম রেখে দিয়েছে সামনে।

এখন উইন্ডোজ এক্সপ্লোরারে যান, ফাইলের নামের উপর ডাবল ক্লিক করুন বা ডান ক্লিক করুন এবং "ওপেন উইথ ..." এবং প্রত্যাশার সাথে প্রদর্শন সহ পপস এক্সেল (2003) ব্যবহার করুন।


@ কোকোয়াল্লা: ঠিক আছে, আমি এটি চেষ্টা করেছি (আবার; পোস্ট করার আগে আমি এটি পরীক্ষা করেছিলাম) এবং এটি এক্সেল 2007 এর সাথে কাজ করেছে (যা আমি এখন ব্যবহার করছি)। আপনি কি open('oldmac.csv', 'rb').read()আপনার ইনপুট যাচাই করতে করেছেন?
জন মাচিন

আমি এক্সেল 2007 দিয়ে চেষ্টা করিনি (আমি জানি এক্সেল 2007 ইউটিএফ -8 ফাইলগুলি
বিএমএসের

@ কোকোয়াল্লা: এক্সেল 2003 এর সাথে এটি আমার পক্ষে কাজ করেছিল যখন আমার ছিল। আপনি কি এক্সেল 2003 এর জন্য সর্বশেষ পরিষেবা প্যাকটি নিশ্চিত? আমার পরামর্শ অনুসারে আপনি কি আপনার ইনপুট যাচাই করেছেন?
জন মাচিন

আমি যাচাই করেছিলাম যে নোটপ্যাডটি ফাইলের শুরুতে একটি বিওএম
আটকেছিল

2

এক্সটেনশন 'xls' দিয়ে আপনি একটি এইচটিএমএল ফাইল সংরক্ষণ করতে পারেন এবং অ্যাকসেন্টগুলি কাজ করবে (কমপক্ষে 2007 এর পূর্বে)।

উদাহরণ: এটি সংরক্ষণ করুন (নোটপ্যাডে utf8 হিসাবে সংরক্ষণ করুন) টেস্ট.এক্সলস হিসাবে:

<html>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
<table>
<tr>
  <th>id</th>
  <th>name</th>
</tr>
<tr>
 <td>4</td>
 <td>Hélène</td>
</tr>
</table>
</html>

আকর্ষণীয় বিকল্প। এটি টেক্সটটি ডানদিকে খোলে তবে কোনও কারণে সমস্ত পৃষ্ঠা সম্পূর্ণ সাদা। ক্লাসিক স্প্রেডশিট লাইনগুলি সীমা এবং কলামগুলি সীমানা ছাড়াই (ম্যাকের জন্য অফিস)
সেবাস্তিয়ান সাস্ট্রে

হ্যাঁ, উইন্ডোজ অফিস 2007 এ একই জিনিস। এটা সর্বদা আমাকে অবাক করে দেয় যে এটি সত্যই সত্যই কাজ করেছিল be (নোট, যদি আপনি যোগ border="1"টেবিল জন্য, আপনাকে কি লাইন পাবেন, কিন্তু মাত্র প্রায় 4 কোষ :)
Benjol

1

এটি কেবল চরিত্রের এনকোডিংয়ের প্রশ্ন। দেখে মনে হচ্ছে আপনি ইউটিএফ -8 হিসাবে আপনার ডেটা রফতানি করছেন: ইউটিএফ -8 এ two দ্বি বাইট সিকোয়েন্স 0xC3 0xA9, যা উইন্ডোজ -১২২২ এ ব্যাখ্যা করলে Ã © হয় © আপনি যখন এক্সেলটিতে আপনার ডেটা আমদানি করেন, তখন এটি নিশ্চিত করে জানান যে আপনি যে অক্ষর এনকোডিংটি ব্যবহার করছেন তা ইউটিএফ -8।


আমি নিশ্চিত করেছি যে ডেটা ইউটিএফ -8 is আমার ডেটাটি
অফ

আমি মনে করি যে আপনাকে ফাইল এনকোডিং পরিবর্তন করতে হবে, এক্সেল
সিএসভি

আমি পুরোপুরি নিশ্চিত নই, যেহেতু বর্তমানে আমি যে মেশিনটি ব্যবহার করছি তার উপরে আমার এক্সেল ইনস্টল নেই, তবে ওপেনঅফিসের সাহায্যে, আপনি যখন কোনও সিএসভি ফাইল আমদানি করবেন তখন অক্ষর এনকোডিংয়ের জন্য একটি ড্রপডাউন বাক্স রয়েছে। সেখান থেকে ইউনিকোড (ইউটিএফ -8) নির্বাচন করুন।
অ্যাডাম রোজনফিল্ড 21

এক্সেলের ড্রপডাউন
আফাইক নেই

1

সিএসভি ফর্ম্যাটটি এএসসিআইআই হিসাবে প্রয়োগ করা হয়েছে, ইউনিকোড নয়, এক্সেলে, এভাবে ডায়াক্রিটিক্সকে ম্যাংলিং করে। আমরা একই সমস্যাটির মুখোমুখি হয়েছি যা আমি কীভাবে জানতে পেরেছিলাম যে অফিশিয়াল সিএসভি স্ট্যান্ডার্ডকে এক্সেলের এএসসিআইআই ভিত্তিক হিসাবে সংজ্ঞায়িত করা হয়েছিল।


আসলে, সিএসভি কোনও নির্দিষ্ট এনকোডিংয়ের জন্য আবদ্ধ নয়। এটি এক্সেল যা ASCII ধরে নিচ্ছে। en.wikipedia.org/wiki/Comma-separated_values
spoulson

ঠিক এটাই আমি বলেছিলাম. "এক্সেল এএসসিআইআই হিসাবে প্রয়োগ করা হয়েছে", "সিএসভি এক্সেল এএসসিআইআই ভিত্তিক হিসাবে সংজ্ঞায়িত হয়েছে"। আপনি আমার সাথে একমত হচ্ছেন বলে আপনি কী পয়েন্টটি তৈরি করছেন তা নিশ্চিত নন।
জেফ ইয়েটস

2
আসলে আপনি বলেছেন "সিএসভি ফর্ম্যাটটি ASCI হিসাবে বাস্তবায়িত হয়েছে", আমি মনে করি যে এখান থেকেই বিভ্রান্তি থেকেই গেছে।
রিচার্ডড

1

এক্সেল 2007 সঠিকভাবে ইউটিএফ -8 BOM (EF বিবি বিএফ) এনকোডেড সিএসভি সহ সঠিকভাবে পড়ে reads

এক্সেল 2003 (এবং সম্ভবত এর আগে) বিওএম (এফএফএইফই) এর সাথে ইউটিএফ -16 এলএ পড়ে, তবে কমা বা সেমিকোলনের পরিবর্তে টিএবির সাথে পড়ে।


1

আমি কেবলমাত্র বেল অর্ডার চিহ্ন দিয়ে শুরু করে ট্যাব-বিভক্ত লিটল-এডিয়ান ইউটিএফ -16 হিসাবে এক্সেল 2007-এ কেবল সঠিকভাবে পার্স করতে সিএসভি পেতে পারি।


1

সিএসভি ফাইলকে আউটপুট দিতে একটি বিওএম লিখে আমার পক্ষে জাজানোতে কাজ করেছিল:

def handlePersoonListExport(request):
    # Retrieve a query_set
    ...

    template = loader.get_template("export.csv")
    context = Context({
        'data': query_set,
    })

    response = HttpResponse()
    response['Content-Disposition'] = 'attachment; filename=export.csv'
    response['Content-Type'] = 'text/csv; charset=utf-8'
    response.write("\xEF\xBB\xBF")
    response.write(template.render(context))

    return response

আরও তথ্যের জন্য http://crashcoursing.blogspot.com/2011/05/exporting-csv-with-spected-characters.html ধন্যবাদ ছেলেরা!


হ্যাঁ, এই এক্সেল 2010 সঙ্গে আমার জন্য কাজ জাভা ব্যবহার ইন printWriter.print('\ufeff'), এছাড়াও দেখুন জাভা একটি হল UTF-8 BOM কিভাবে জুড়বেন
tsauerwein

1

আমি যে অন্য সমাধানটি পেয়েছি তা হ'ল ফলাফলটি উইন্ডোজ কোড পৃষ্ঠা 1252 (উইন্ডোজ-1252 বা সিপি 1252) হিসাবে এনকোড করা। এটি করা হবে, উদাহরণস্বরূপ যেমন Content-Typeকিছুতে উপযুক্তভাবে text/csv; charset=Windows-1252সেট করে এবং একইভাবে প্রতিক্রিয়া স্ট্রিমের অক্ষর এনকোডিং সেট করে।


এই এক জন্য ধন্যবাদ। এক্সেল উইন্ডো এবং ম্যাক উপর কাজ করে। আমি এটি ব্যবহার করছি।
সেবাস্তিয়ান সাস্ট্রে

এটি কেবল তখনই কাজ করবে যদি আপনার অ-এসিআই চরিত্রের পরিসরটি উইন্ডোজ -১২২২ এর মধ্যে পুরোপুরি পড়ে। সুতরাং উদাহরণস্বরূপ, কোনও কোরিয়ান / চাইনিজ / জাপানি, কোনও সিরিলিক ইত্যাদি নেই তবে আমি অনুমান করি আপনি বেশিরভাগ পশ্চিমা ইওরোপীয় ভাষার জন্য এই দ্বারা স্লাইড হয়ে যাবেন।
টম ম্যাকক্লিউর

1

নোট করুন যে ইউটিএফ -8 বিওএম অন্তর্ভুক্ত করা অগত্যা একটি ভাল ধারণা নয় - এক্সেলের ম্যাক সংস্করণগুলি এটিকে উপেক্ষা করে এবং বাস্তবে বিওএমকে ASCII হিসাবে প্রদর্শিত করবে ... আপনার স্প্রেডশিটের প্রথম ক্ষেত্রের শুরুতে তিনটি বাজে অক্ষর…


আমি জানি এই মন্তব্যটি 6 বছর পরে, তবে এফডাব্লুআইডাব্লু: '\uFEFF' + myCsvStringম্যাক এক্সেল 15.19.1 (2016) তে প্রত্যাশার মতো কাজ করে এমন একটি ফাইল ডাউনলোড করতে জাভাস্ক্রিপ্ট ব্যবহার করা ।
ববজোনস

0

আপনি যে এনকোডিংটি ফাইলটি তৈরি করছেন তা পরীক্ষা করুন, এক্সেলটি ফাইলটি সঠিকভাবে প্রদর্শন করতে আপনাকে অবশ্যই সিস্টেম ডিফল্ট কোডপেজ ব্যবহার করতে হবে।

আপনি কোন ভাষা ব্যবহার করছেন? যদি এটি হয় .তখন ফাইলটি তৈরি করার সময় আপনার কেবল এনকোডিং.ডিফল্ট ব্যবহার করা উচিত।


রফতানি ডেটা utf-8। আমি পিএইচপি 5
ফ্রেডডো 411

উইন্ডোজ
-১২২২ কোডেজে

0

আমার মতো vb.net তে যদি আপনার লিগ্যাসি কোড থাকে তবে নিম্নলিখিত কোডটি আমার পক্ষে কাজ করেছে:

    Response.Clear()
    Response.ClearHeaders()
    Response.ContentType = "text/csv"
    Response.Expires = 0
    Response.AddHeader("Content-Disposition", "attachment; filename=export.csv;")
    Using sw As StreamWriter = New StreamWriter(Context.Response.OutputStream, System.Text.Encoding.Unicode)
        sw.Write(csv)
        sw.Close()
    End Using
    Response.End()

0

আমি সমস্যা সমাধানের একটি উপায় খুঁজে পেয়েছি। এটি একটি বাজে হ্যাক তবে এটি কাজ করে: ওপেন অফিসের সাথে ডকটি খুলুন , তারপরে এটি কোনও এক্সেল বিন্যাসে সংরক্ষণ করুন; ফলাফল .xlsবা .xlsxউচ্চারণ অক্ষর প্রদর্শিত হবে।


1
ওপিতে বলা হয়েছে যে তিনি প্রোগ্রামিয়ালি রফতানি করছেন, সুতরাং তিনি এমন কোনও সমাধান খুঁজছেন না যাতে ম্যানুয়াল হস্তক্ষেপের প্রয়োজন।
খ্রিস্টিয়ান ওয়েস্টারবিয়ক

0

রুবি 1.8.7 এর সাথে আমি প্রতিটি ক্ষেত্রকে ইউটিএফ -16 এ এনকোড করে বিওএম (সম্ভবত) ফেলে দেব।

অ্যাক্টিভ_স্যাফোল্ড_ এক্সপোর্ট থেকে নিম্নলিখিত কোডটি বের করা হয়েছে:

<%                                                                                                                                                                                                                                                                                                                           
      require 'fastercsv'                                                                                                                                                                                                                                                                                                        
      fcsv_options = {                                                                                                                                                                                                                                                                                                           
        :row_sep => "\n",                                                                                                                                                                                                                                                                                                        
        :col_sep => params[:delimiter],                                                                                                                                                                                                                                                                                          
        :force_quotes => @export_config.force_quotes,                                                                                                                                                                                                                                                                            
        :headers => @export_columns.collect { |column| format_export_column_header_name(column) }                                                                                                                                                                                                                                
      }                                                                                                                                                                                                                                                                                                                          

      data = FasterCSV.generate(fcsv_options) do |csv|                                                                                                                                                                                                                                                                           
        csv << fcsv_options[:headers] unless params[:skip_header] == 'true'                                                                                                                                                                                                                                                      
        @records.each do |record|                                                                                                                                                                                                                                                                                                
          csv << @export_columns.collect { |column|                                                                                                                                                                                                                                                                              
            # Convert to UTF-16 discarding the BOM, required for Excel (> 2003 ?)                                                                                                                                                                                                                                     
            Iconv.conv('UTF-16', 'UTF-8', get_export_column_value(record, column))[2..-1]                                                                                                                                                                                                                                        
          }                                                                                                                                                                                                                                                                                                                      
        end                                                                                                                                                                                                                                                                                                                      
      end                                                                                                                                                                                                                                                                                                                        
    -%><%= data -%>

গুরুত্বপূর্ণ লাইনটি হ'ল:

Iconv.conv('UTF-16', 'UTF-8', get_export_column_value(record, column))[2..-1]

-2

সিএসভি ফাইলটি নোটপ্যাড ++ ক্লিক করে এনকোডে ক্লিক করুন, ইউটিএফ -8 এ রূপান্তর নির্বাচন করুন (ইউটিএফ -8 এ রূপান্তর করবেন না (বিওএম ছাড়াই)) এক্সেল সহ ডাবল ক্লিক করে ওপেন সংরক্ষণ করুন আশা করি ক্রিস্টোফ গ্রিসনকে সহায়তা করবে আশা করি


1
এটি প্রোগ্রামের মতো হওয়ার কথা বলে এই প্রশ্নের উত্তর দেয় না এবং প্রতিটি ফাইল ম্যানুয়ালি পুনরায় সংরক্ষণ করতে ব্যবহারকারীর হস্তক্ষেপের প্রয়োজন হয় না
জো ডব্লিউ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.