এক্সেলকে স্বয়ংক্রিয়ভাবে ইউটিএফ -8 সিএসভি ফাইলগুলি সনাক্ত করতে বাধ্য করা সম্ভব?


453

আমি এমন একটি অ্যাপ্লিকেশনটির একটি অংশ বিকাশ করছি যা CSV ফাইলগুলিতে কিছু ডেটা রফতানির জন্য দায়ী। অ্যাপ্লিকেশন সর্বদা UTF-8 ব্যবহার করে কারণ এটি সমস্ত স্তরে বহুভাষিক প্রকৃতির। তবে এক্সেলের মধ্যে এই জাতীয় সিএসভি ফাইল (যেমন ডায়াক্রিটিক্স, সিরিলিক অক্ষর, গ্রীক অক্ষর সমন্বিত) খোলার ফলে এমন কিছু প্রত্যাশিত ফলাফল পাওয়া যায় না Г„/Г¤, Г–/Г¶। এবং আমি জানি না কীভাবে এক্সেলকে জোর করে বোঝানো যায় যে উন্মুক্ত সিএসভি ফাইলটি ইউটিএফ -8 এ এনকোড করা আছে। আমি ইউটিএফ -8 বিওএম নির্দিষ্ট করার চেষ্টাও করেছি EF BB BF, তবে এক্সেল এটিকে উপেক্ষা করে।

কোন workaround আছে?

পিএস কোন সরঞ্জামগুলি সম্ভবত এক্সেলের মতো আচরণ করতে পারে?


হালনাগাদ

আমার বলতে হবে যে আমি প্রশ্নটি তৈরির সাথে সম্প্রদায়কে বিভ্রান্ত করেছি। আমি যখন এই প্রশ্নটি জিজ্ঞাসা করছিলাম, তখন আমি সাবলীল এবং স্বচ্ছ উপায়ে কোনও ব্যবহারকারীর জন্য কোনও সমস্যা ছাড়াই এক্সেলের একটি ইউটিএফ -8 সিএসভি ফাইল খোলার উপায় জিজ্ঞাসা করেছি। যাইহোক, আমি একটি ভুল তৈয়ার এরকম চাওয়ার ব্যবহৃত স্বয়ংক্রিয়ভাবে । এটি খুব বিভ্রান্তিকর এবং এটি ভিবিএ ম্যাক্রো অটোমেশনের সাথে সংঘর্ষ। এই প্রশ্নের দুটি উত্তর রয়েছে যা আমি সবচেয়ে বেশি প্রশংসা করি: অ্যালেক্স https://stackoverflow.com/a/6002338/166589 এর প্রথম উত্তর এবং আমি এই উত্তরটি গ্রহণ করেছি; এবং দ্বিতীয়টি মার্ক https://stackoverflow.com/a/6488070/166589 দ্বারাযা একটু পরে হাজির হয়েছে। ব্যবহারের দৃষ্টিকোণ থেকে, এক্সেলের মনে হয়েছিল যে ভাল ব্যবহারকারী-বান্ধব UTF-8 CSV সমর্থন নেই, তাই আমি উভয় উত্তরই সঠিক বলে বিবেচনা করি এবং আমি প্রথমে অ্যালেক্সের উত্তর গ্রহণ করেছি কারণ এটি সত্যই জানিয়েছে যে এক্সেল করতে সক্ষম ছিল না স্বচ্ছভাবে। এখানে আমি স্বয়ংক্রিয়ভাবে বিভ্রান্ত হয়েছি । মার্কের উত্তরটি আরও উন্নত ব্যবহারকারীদের প্রত্যাশিত ফলাফল অর্জনের জন্য আরও জটিল পদ্ধতির প্রচার করে। উভয় উত্তর দুর্দান্ত, তবে অ্যালেক্সের একটিটি আমার পরিষ্কারভাবে নির্দিষ্ট না করা প্রশ্নের সাথে আরও ভাল ফিট করে।


আপডেট 2

শেষ সম্পাদনার পাঁচ মাস পরে, আমি লক্ষ্য করেছি যে অ্যালেক্সের উত্তর কোনও কারণে অদৃশ্য হয়ে গেছে। আমি সত্যিই আশা করি এটি কোনও প্রযুক্তিগত সমস্যা ছিল না এবং আমি আশা করি যে উত্তরটি এখন আরও বেশি সে বিষয়ে আর কোনও আলোচনা হবে না। তাই আমি মার্কের উত্তরটিকে সেরা হিসাবে গ্রহণ করছি।


1
আপনি কি ট্যাব-সীমাবদ্ধ ফাইলগুলি ব্যবহার করতে পারেন? যদি তা হয় তবে আপনার আরও ভাগ্য হতে পারে।
টিম পেরি

8
অফিস 2010+: সেরা কাজ: বিওএম এবং ডিলিমেটার \tহিসাবে ইউটিএফ -16 এলএ । ইংরাজী এবং নন ইংলিশ এক্সেল সেটিংয়ে কাজ করবে। Ctrl-Sফাইল ফর্ম্যাট ইত্যাদি নির্বাচন না করে টিপতে পারে ইউনিকোড অক্ষর সংরক্ষণ করবে।
সেবাস্তিয়ান

@ ডানকান খোলামেলাভাবে বলছেন, আমি বিভ্রান্ত এবং "বিচার করা শক্ত" hard আমি 2 বছরেরও বেশি আগে অ্যালেক্সের উত্তর গ্রহণ করেছি (14 এবং Q এবং A উভয়ই 14 মে), এবং তারপরে মার্ক একটি জঘন্য কাজের পরামর্শ দেওয়ার প্রস্তাব দিয়েছিল (আমি আসলে এটি পরীক্ষা করিনি) যা আমার প্রশ্নে আশ্চর্যজনকভাবে আরও বেশি পয়েন্ট অর্জন করেছিল যা আশ্চর্যরকম হয়ে গেল পাশাপাশি জনপ্রিয়। আমরা আসলে অনেক আগে আমার প্রকল্পে এক্সেল সমর্থন প্রত্যাখ্যান করেছি, এবং আমি অ্যালেক্সের সুনামের স্কোরটি নিতে চাই না, কারণ এক্সেলটি মনে হয়েছিল এবং সম্ভবত এখনও মনে হচ্ছে (দয়া করে আমি ভুল হলে আমাকে সংশোধন করুন), সিএসভিকে ভুলভাবে পরিচালনা করতে। দুঃখিত, এটা বলা শক্ত।
লুবুমায়ার শায়দারিভ

2
অ্যালেক্সের উত্তর একজন মডারেটর মুছে ফেলেছিল। কোনও ব্যাখ্যা দেওয়া হয়নি, তবে আপনার যথেষ্ট খ্যাতি থাকলে আপনি এটি দেখতে পারেন।
মার্ক র্যানসম

1
যেহেতু সময় মেশিনগুলির এখনও অস্তিত্ব নেই কেবলমাত্র দ্বিমত করতে হবে।
osexpert

উত্তর:


398

অ্যালেক্স সঠিক, তবে আপনার যেমন সিএসভিতে রফতানি করতে হবে, CSV ফাইলগুলি খোলার সময় আপনি ব্যবহারকারীদের এই পরামর্শটি দিতে পারেন:

  1. এক্সপোর্ট করা ফাইলটি সিএসভি হিসাবে সংরক্ষণ করুন
  2. এক্সেল খুলুন
  3. ডেটা ব্যবহার করে ডেটা আমদানি করুন -> বহিরাগত ডেটা আমদানি করুন -> ডেটা আমদানি করুন
  4. "সিএসভি" ফাইলের ধরণটি নির্বাচন করুন এবং আপনার ফাইলে ব্রাউজ করুন
  5. আমদানি উইজার্ডে ফাইল_আরগিনকে "65001 ইউটিএফ" তে পরিবর্তন করুন (বা সঠিক ভাষার অক্ষর সনাক্তকারী চয়ন করুন)
  6. ডিলিমিটারকে কমাতে পরিবর্তন করুন
  7. কোথায় আমদানি করবেন এবং শেষ করুন নির্বাচন করুন

এইভাবে বিশেষ অক্ষরগুলি সঠিকভাবে দেখা উচিত।


163

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

যদি কারও মতো একই সমস্যা হয় তবে আমি .NET এর ইউটিএফ 8 এনকোডিং ক্লাস একটি GetBytes()কলে বাইট-অর্ডার চিহ্নিতকারী আউটপুট না দেয় । বিওএমকে আউটপুট দেওয়ার জন্য আপনার স্ট্রিমগুলি ব্যবহার করতে হবে (বা একটি workaround ব্যবহার করতে হবে)।


18
কোনও ইউটিএফ -8 বিওএম tingোকানোই উপায় হিসাবে মনে হচ্ছে। তারপরে এটি স্বচ্ছ।
vy32

12
আমি নোটপ্যাড ++ ব্যবহার করে সহজেই .csv থেকে রূপান্তর UTF-8করতেUTF-8 with BOM
Sébastien

3
হ্যাঁ - সেরা সমাধান। HTTP প্রতিক্রিয়াগুলিতে শিরোনাম স্থাপনের আশেপাশে প্রচুর বিভ্রান্তিকর পোস্ট। এটি সমস্যার সমাধান করে। নোটপ্যাডে ফাইলটি খোলার সময় এবং ইউটিএফ -8 বিকল্পটি ব্যবহার করে ডানদিকে ফিরে সংরক্ষণ করার সময় একই জিনিস দেখা যায়। বাইট-অর্ডার চিহ্নিতকারী যুক্ত করুন।
ব্যবহারকারী369142

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

1
এক্সেলের ম্যাক সংস্করণটি এখনও বিওএমকে উপেক্ষা করবে বলে মনে হচ্ছে। (ম্যাক ২০১১ এর জন্য এক্সেল।)
থমাস অ্যান্ড্রুজ

74

উপেক্ষিত BOM সঙ্গে বাগ এক্সেল 2013 জন্য সংশোধন করা আমি সিরিলিক অক্ষর সঙ্গে একই সমস্যা কিন্তু BOM চরিত্র যোগ বলে মনে হয় \uFEFFসাহায্য করেছিল।


8
যেহেতু আমি আমার সিএসভি ফাইলের শুরুতে Java uFEFF যুক্ত করেছি (জাভাতে উত্পন্ন), এক্সেল সেগুলি সঠিকভাবে খুলতে সক্ষম! থেক্স
গাল্ডো

16
যে আমার সমস্যা খুব সমাধান, পিএইচপি এটা ভালো দেখায়: $utf8_with_bom = chr(239) . chr(187) . chr(191) . $csvText;
আবদুল্লাহ

@ আপডোলা এই মন্তব্যের জন্য আপনাকে অনেক ধন্যবাদ, আমার ঘন্টা বাঁচিয়েছে
নাথান হ্যাফিল্ড

ইউটিএফ -8, সংজ্ঞা অনুসারে, বিওএম অক্ষর ব্যবহার করে না বা ব্যবহার করা উচিত নয়। এক্সেল বিএমও-কে যেভাবে ইউটিএফ -8-এর সুবিধা দিয়ে ইউনিকোডের উপরে পড়বে, এটি ASCII এর সাথে পিছনে সামঞ্জস্যপূর্ণ reads বিওএম যোগ করা এক্সেলের কাজ করবে, তবে অন্যান্য যথাযথ ইউটিএফ -8 / এএসসিআইআই ফাইল পড়বে।
নেলসন

1
\ এফএইফ \ এফএফ ম্যাক ওএস এক্সেল 2016 কে পুরো ফাইলটি জাপানি হায়ারোগ্লাইফ হিসাবে তৈরি করে।
নাকিলন

55

এটি অবিশ্বাস্য যে এখানে অনেক উত্তর রয়েছে তবে কোনও প্রশ্নের উত্তর নেই:

"আমি যখন এই প্রশ্নটি জিজ্ঞাসা করছিলাম তখন আমি কোনও ব্যবহারকারীর জন্য কোনও সমস্যা ছাড়াই এক্সেলের একটি ইউটিএফ -8 সিএসভি ফাইল খোলার উপায় চেয়েছিলাম, ..."

200+ আপ-ভোট সহ গ্রহণযোগ্য উত্তর হিসাবে চিহ্নিত উত্তরটি আমার পক্ষে অকেজো কারণ আমি কীভাবে এক্সেলকে কনফিগার করতে পারি তা আমার ব্যবহারকারীদের একটি ম্যানুয়াল দিতে চাই না। এগুলি ছাড়াও: এই ম্যানুয়ালটিতে একটি এক্সেল সংস্করণ প্রযোজ্য হবে তবে অন্যান্য এক্সেল সংস্করণে বিভিন্ন মেনু এবং কনফিগারেশন ডায়ালগ রয়েছে। প্রতিটি এক্সেল সংস্করণের জন্য আপনার একটি ম্যানুয়াল দরকার হবে।

সুতরাং প্রশ্নটি কীভাবে এক্সেলটি সাধারণ ডাবল ক্লিকের মাধ্যমে ইউটিএফ 8 ডেটা প্রদর্শন করবেন?

ওয়েল অন্তত এক্সেল 2007 এ এটি সম্ভব নয় আপনি যদি সিএসভি ফাইল ব্যবহার করেন তবে ইউটিএফ 8 বিওএম উপেক্ষা করা হয় এবং আপনি কেবল আবর্জনা দেখতে পাবেন। এটি ইতিমধ্যে লিউবায়ার শায়দারিভের প্রশ্নের অংশ:

"আমি ইউটিএফ -8 বিওএম ইফ বিবি বিএফ নির্দিষ্ট করার চেষ্টাও করেছি, তবে এক্সেল এটিকে উপেক্ষা করে।"

আমি একই অভিজ্ঞতাটি করি: এক্সওয়েতে আবর্জনার ফলাফলের সাথে বিওএমের সাথে একটি ইউটিএফ 8 সিএসভি ফাইলে রাশিয়ান বা গ্রীক ডেটা লেখা:

ইউটিএফ 8 সিএসভি ফাইলের সামগ্রী:

Colum1;Column2
Val1;Val2
Авиабилет;Tλληνικ

এক্সেল 2007 এর ফলাফল:

সিএসভি ইউটিএফ 8 এক্সেল

সমাধানটি হ'ল সিএসভি ব্যবহার না করা। এই বিন্যাস মাইক্রোসফট দ্বারা তা বোকার মত বাস্তবায়িত এটি অঞ্চলের সেটিংসের উপর নির্ভর করে কন্ট্রোল প্যানেল যদি কমা বা সেমিকোলন বিভাজক হিসেবে ব্যবহৃত হয়। সুতরাং একই সিএসভি ফাইলটি একটি কম্পিউটারে সঠিকভাবে খুলতে পারে তবে অ্যান্থার কম্পিউটারে নয়। "সিএসভি" এর অর্থ " কমা বিভাজিত মানগুলি" তবে উদাহরণস্বরূপ একটি জার্মান উইন্ডোজে ডিফল্টরূপে সেমিকোলন বিভাজক হিসাবে অবশ্যই ব্যবহার করা উচিত যখন কমা কাজ করে না। (এখানে এটির নামকরণ করা উচিত এসএসভি = সেমিকোলন পৃথক মানসমূহ) উইন্ডোজের বিভিন্ন ভাষার সংস্করণের মধ্যে সিএসভি ফাইলগুলি আদান প্রদান করা যায় না। এটি ইউটিএফ -8 সমস্যার অতিরিক্ত সমস্যা।

এক্সেল বিদ্যমান কয়েক দশক থেকে। এটা লজ্জার বিষয় যে মাইক্রোসফ্ট এত বছর সিএসভি আমদানির মতো মৌলিক জিনিসটি কার্যকর করতে সক্ষম হয়নি।


তবে, আপনি যদি এইচটিএমএল ফাইলে একই মান রাখেন এবং ফাইলটি এক্সটেনশন এক্সএলএস দিয়ে বিওএম-র সাথে ইউটিএফ 8 ফাইল হিসাবে সংরক্ষণ করেন তবে সঠিক ফলাফল পাবেন।

ইউটিএফ 8 এক্সএলএস ফাইলের সামগ্রী:

<table>
<tr><td>Colum1</td><td>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
</table>

এক্সেল 2007 এর ফলাফল:

ইউটিএফ 8 এইচটিএমএল এক্সেল

আপনি এইচটিএমএলে রঙগুলিও ব্যবহার করতে পারেন যা এক্সেলটি সঠিকভাবে প্রদর্শিত হবে।

<style>
.Head { background-color:gray; color:white; }
.Red  { color:red; }
</style>
<table border=1>
<tr><td class=Head>Colum1</td><td class=Head>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td class=Red>Авиабилет</td><td class=Red>Tλληνικ</td></tr>
</table>

এক্সেল 2007 এর ফলাফল:

ইউটিএফ 8 এইচটিএমএল এক্সেল

এই ক্ষেত্রে কেবল টেবিলের একটি কালো সীমানা এবং রেখা রয়েছে। আপনি যদি সমস্ত কক্ষগুলি গ্রিডলাইন প্রদর্শন করতে চান তবে এটি এইচটিএমএলেও সম্ভব:

<html xmlns:x="urn:schemas-microsoft-com:office:excel">
    <head>
        <meta http-equiv="content-type" content="text/plain; charset=UTF-8"/>
        <xml>
            <x:ExcelWorkbook>
                <x:ExcelWorksheets>
                    <x:ExcelWorksheet>
                        <x:Name>MySuperSheet</x:Name>
                        <x:WorksheetOptions>
                            <x:DisplayGridlines/>
                        </x:WorksheetOptions>
                    </x:ExcelWorksheet>
                </x:ExcelWorksheets>
            </x:ExcelWorkbook>
        </xml>
    </head>
    <body>
        <table>
            <tr><td>Colum1</td><td>Column2</td></tr>
            <tr><td>Val1</td><td>Val2</td></tr>
            <tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
        </table>
    </body>
</html>

এই কোডটি এমনকি ওয়ার্কশিটের নাম নির্দিষ্ট করতে দেয় (এখানে "মাইসপারশিট")

এক্সেল 2007 এর ফলাফল:

এখানে চিত্র বর্ণনা লিখুন


1
এবং এটি অবিশ্বাস্য যে লোকেরা এখনও এর উত্তর দেয়। :) তবে, আমি যুক্তি দিয়ে বলব যে সিএসভি মারা গেছে: সিএসভি একটি মারাত্মক সহজ সরল স্ট্রিমিং ফর্ম্যাট এবং আমি যখন এই প্রকল্পে ছিলাম তখন আমরা উপাদানগুলির মিথস্ক্রিয়া করার জন্য এটি সত্যই ভারী ব্যবহার করেছি। আমি কখনও কখনও এইচটিএমএল ফর্ম্যাটটি ব্যবহার করি না কারণ এটি খুব নিন্দনীয় প্রকৃতির হয়ে থাকে এবং আমি কখনও এই প্রকল্পের ব্যবহারকারীদের কেবলমাত্র এক্সেল-বান্ধব করে তুলতে এইচটিএমএল-তে রফতানি করতে পারি না। এক্সেল ইউটিএফ -8 সিএসভিতে চুষে ফেলেছে এবং তার পর থেকে 5 বছর পরিবর্তন হয়েছে এমন আমার কোনও ধারণা নেই। আমার ধারণা, কমা- অর্ধ-কোলন- এবং ট্যাব-বিস্মৃত ফাইলগুলি সত্যই উন্মাদনা।
লুবোমায়ার শায়দারিভ

5
এটি এখনও অবিশ্বাস্য নয় যে লোকেরা এখনও আপনার প্রশ্নের জবাব দেয় কারণ গুগল তাদের এখানে এনেছে: সমস্ত একই প্রশ্নের সাথে: আমি কী চাই বোকামি এক্সেল করব? গুগলে 3 টি শব্দ লিখুন: "এক্সেল সিএসভি utf8" এবং আপনার প্রশ্নটি বিশ্বব্যাপী প্রথম ফলাফল। আপনি লিখেছেন একজন বেস্টসেলার!
এলময়ে

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

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

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

48

আমরা এই কার্যকারিতাটি ব্যবহার করেছি:

  1. সিএসভিকে ইউটিএফ -16 এলই তে রূপান্তর করুন
  2. ফাইলের শুরুতে বিওএম .োকান
  3. ফিল্ড বিভাজক হিসাবে ট্যাব ব্যবহার করুন

1
ধন্যবাদ! আমি এই থ্রেডে অন্য সমস্ত উত্তর চেষ্টা করেছিলাম, কিন্তু ইউটিএফ -8 এ রূপান্তর করা কেবল কার্যকর হয়নি। আমি যখন বিওএম-এর সাথে ইউটিএফ -16 চেষ্টা করেছি এটি তাত্ক্ষণিকভাবে কাজ করেছিল।
হুস্কি

ম্যাক ২০১১ এর জন্য এক্সেলের জন্য আমি ইউটিএফ -১ little লিটল এন্ডিয়ান
সিএসভি

ধন্যবাদ, আমার ব্যবহারকারীদের একটি ইউনিকোড সিএসভি দেওয়ার জন্য এই সমাধানটি দুর্দান্ত যা তারা এক্সেলে খুলতে পারে।
ব্যবহারকারী 1073075

21

পিএইচপি উত্পাদিত সিএসভি ফাইলগুলির সাথে একই সমস্যা ছিল। এক্সট্রেটর বিওএমকে উপেক্ষা করেছিল যখন "sep=,\n"বিষয়বস্তুর শুরুতে পৃথককারী সংজ্ঞায়িত করা হয়েছিল (তবে অবশ্যই বিওএম পরে) after

সুতরাং "\xEF\xBB\xBF"সামগ্রীর শুরুতে একটি বিওএম ( ) যুক্ত করা এবং সেমিকোলনকে বিভাজক হিসাবে সেট করার মাধ্যমে fputcsv($fh, $data_array, ";");কৌতুক হয়।


13

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

আমি স্বয়ংক্রিয়ভাবে ইউটিএফ -8 স্বীকৃতি পাওয়ার জন্য এক্সেল পাওয়ার কোনও উপায় খুঁজে পেতে ব্যর্থ হয়েছি এবং ফাইলগুলি কীভাবে খুলতে হয় তার জন্য জটিল নির্দেশাবলীর ভোক্তাদের উপর চাপিয়ে দিতে / প্রস্তুত করতে আমি সক্ষম হইনি। সুতরাং আমি তাদের ইউটিএফ -8 এর পরিবর্তে ইউটিএফ -16 লে (একটি বিওএম সহ) হিসাবে এনকোড করেছি। দু'বার আকারে, তবে এক্সেল এনকোডিংটি সনাক্ত করতে পারে। এবং তারা ভালভাবে সংকোচিত হয়, তাই আকারটি খুব কমই (তবে দুঃখজনকভাবে কখনই নয়) গুরুত্বপূর্ণ।


এটি একটি পুরানো প্রশ্ন, তবে আমি খুশি যে লোকেরা এখনও এর উত্তর দেয়। ধন্যবাদ. :)
লাইবুমায়ার শায়দারিভ

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

আজব, আমার জন্য এটি কাজ করে না। অক্ষরগুলি চীনা প্রতীকগুলিতে পরিণত করে ... (তাদের হিব্রু বলে মনে করা হয়)
ভিভারকে

আমি যখন "ইউটিএফ -16 বিও সাথে বিওএম" তে সংরক্ষণ করি তখন এক্সেলে আমার চীনা অক্ষর ছিল। আমি যখন "বিওএম সহ ইউটিএফ -16 এলই" চেষ্টা করেছি তখন এটি কাজ করেছিল! আমি পরীক্ষার জন্য সাব্লাইম টেক্সট ব্যবহার করেছি।
হেন্নো

12

পুরানো প্রশ্ন তবে হেক, সহজ সমাধানটি হ'ল:

  1. নোটপ্যাডে সিএসভি খুলুন
  2. হিসাবে সংরক্ষণ করুন -> ডান এনকোডিং নির্বাচন করুন
  3. নতুন ফাইল খুলুন

1
আপনি কোন এক্সেল সংস্করণ ব্যবহার করেন?
লুবোমায়ার শায়দারিভ

1
উজ্জ্বল, কেবল কাজ করে এবং সমস্যাটি সমাধান করে (কমপক্ষে আমার জন্য)
আউবারন ভ্যাচার

1
নাহ, কারণ এক্সেলকে সিএসভি ফাইল হিসাবে .csv ফাইলটি খুলতে সমস্যা হ'ল। মানে, আমার একটি প্রক্রিয়া রয়েছে যেখানে আমি সিএসভি ফাইলগুলি উত্পাদন করি। ব্যবহারকারীর তখন কেবল ফাইলগুলি খোলার প্রয়োজন হবে। এখানে তার চেয়ে আরও বেশি কিছু করা দরকার।
ভিভারকে

2
@ ভিভারকে আপনি যদি নিয়মিত ফাইল তৈরি করেন তবে এটি সর্বোত্তম সমাধান নয়। তবে এটি যদি একমুখী হয় তবে এই উত্তরটি সঠিক। এটি কাজ করে কারণ নোটপ্যাড একটি ইউটিএফ -8 বা ইউটিএফ -16 ফাইলের শুরুতে বিওএম রাখবে।
মার্ক মুক্তিদান

একটি যাদুমন্ত্র মত কাজ করে. ((:
ব্যবহারকারী2925795

10

আমি যেমন পোস্ট করেছি http://thinkinginsoftware.blogspot.com/2017/12/correctly-generate-csv-that-excel-can.html :

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

gsed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' file.csv

উপস্থিত না থাকলে এই কমান্ডটি ইউটিএফ -4 বিওএম প্রবেশ করায়। সুতরাং এটি একটি আদর্শ নির্দেশ। এখন আপনার ফাইলটি ডাবল ক্লিক করতে এবং এটি এক্সলে খুলতে সক্ষম হওয়া উচিত।


ধন্যবাদ এটি স্থির। আমি স্রেফ সিএসভি রূপান্তর করেছি ';' নোটপ্যাড ++ এ ইউটিএফ-বিওমে বিভক্ত হয়েছে এবং জানুন এক্সেলস এটি সঠিকভাবে খোলে।
র্যান্ডমগুই

ঠিক কী দরকার ছিল! এটি কীভাবে পিএইচপি স্ট্যাকওভারফ্লো // প্রশ্নগুলি
ইএফসি

এটি এক্সেলের পক্ষে কাজ যা সিএসভি ফাইলগুলিতে চূড়ান্ত চরিত্রগুলিকে চিনতে পারে না। সুতরাং এই সংশোধন এক্সেল সমস্যা ঠিক করতে।
সিবিপি

এটি কমা বিচ্ছিন্নকারীদের সাথে এক্সেল 2007 গ্রীক সংস্করণের পক্ষে কাজ করেছে। ধন্যবাদ.
NameOfTheRose

Fs.createWriteStream এ 'হল UTF-16le' থেকে এনকোডিং পরিবর্তিত (ফাইলনামটি, {এনকোডিং: 'হল UTF-16le'}) এবং সীমা অতিক্রম করা সঠিকভাবে CSV ফাইল খোলা
রাহুল শুক্লা

8

আপনি নোটপ্যাড ++ এর মাধ্যমে বিওএম দিয়ে .csv ফাইলটি ইউটিএফ -8 এ রূপান্তর করতে পারেন:

  1. নোটপ্যাড ++ এ ফাইলটি খুলুন ।
  2. মেনুতে যান EncodingConvert to UTF-8
  3. মেনুতে যান FileSave
  4. নোটপ্যাড ++ বন্ধ করুন
  5. এক্সলে ফাইলটি খুলুন।

মাইক্রোসফ্ট এক্সেল 2013 (15.0.5093.1000) এমএসও (15.0.5101.1000) "জার্মান (জার্মানি)" তে সেট অ-ইউনিকোড প্রোগ্রামগুলির লোকেল সহ উইন্ডোজ 8.1 তে মাইক্রোসফ্ট অফিস প্রফেশনাল প্লাস 2013 থেকে 64-বিটে কাজ করেছেন।


1
আপনি যা বলেছিলেন তা করেছেন, কিছুতেই কাজ করেননি। রূপান্তর / এনকোডিং, অক্ষর সেট সেট করা, আমার ক্ষেত্রে কিছুই কাজ করে না। গুগল শিটগুলিতে ফাইল আমদানি করুন, সিএসভি হিসাবে ডাউনলোড করুন, নির্দ্বিধায় কাজ করেছেন। 2045 থেকে আপনার স্বাগত
পাকলবাকিম

1
আমি এটিকে এনকোডিংয়ের সাথে রূপান্তর করতে হয়েছিল -> সিনভার্ট টি ইউটিএফ-8-বিওএম এক্সেল সংস্করণ 2016
ইগোর ভুকোভিয়

4

Utf-8 পাঠ্য এবং সিএসভি ফাইল খোলার জন্য সরল ভিবিএ ম্যাক্রো

Sub OpenTextFile()

   filetoopen = Application.GetOpenFilename("Text Files (*.txt;*.csv), *.txt;*.csv")
   If filetoopen = Null Or filetoopen = Empty Then Exit Sub

   Workbooks.OpenText Filename:=filetoopen, _
   Origin:=65001, DataType:=xlDelimited, Comma:=True

End Sub

উত্স: = 65001 হ'ল ইউটিএফ -8। কমা: কলামে বিতরণ করা .csv ফাইলগুলির জন্য সত্য

এটি সর্বদা উপলব্ধ থাকার জন্য এটি ব্যক্তিগত.এক্সলস্বে সংরক্ষণ করুন। ম্যাক্রো কল বোতাম যুক্ত করে এক্সেল সরঞ্জামদণ্ডকে ব্যক্তিগতকরণ করুন এবং সেখান থেকে ফাইলগুলি খুলুন। আপনি ম্যাক্রোতে আরও ফর্ম্যাটিং যুক্ত করতে পারেন, যেমন কলাম স্বতঃফিট, প্রান্তিককরণ ইত্যাদি।


2
ধন্যবাদ। দুর্ভাগ্যক্রমে, এটি সত্যই উন্নত এক্সেল ব্যবহারকারীদের জন্য পরামর্শ এবং আমি কী লক্ষ্য করছি, এই প্রশ্নটি জিজ্ঞাসা করছে, এক্সেলটি স্বয়ংক্রিয়ভাবে তা করতে বাধ্য করছে।
লাইবুমায়ার শায়দারিভ

আমি এই কোড স্নিপেট ব্যবহার করার চেষ্টা করেছি কিন্তু এটি আমার পক্ষে কার্যকর হয় না। আমি এক্সেল 2013 ব্যবহার করি
শরুনাস বিয়েলস্কিস

3

এক্সেলটিতে ফাইল খোলার আগ্রহী ব্যবহারকারীদের সাহায্যের জন্য যা আমার মতো এই থ্রেডটি অর্জন করে।

আমি নীচের উইজার্ডটি ব্যবহার করেছি এবং এটি আমার জন্য খুব ভাল কাজ করেছে, একটি ইউটিএফ -8 ফাইল আমদানি করে। স্বচ্ছ নয়, তবে আপনার যদি ইতিমধ্যে ফাইলটি থাকে তবে দরকারী।

  1. মাইক্রোসফ্ট এক্সেল 2007 খুলুন।
  2. ডাটা মেনু বার অপশনে ক্লিক করুন।
  3. থেকে পাঠ্য আইকনে ক্লিক করুন।
  4. আপনি যে ফাইলটি আমদানি করতে চান তার অবস্থানটিতে নেভিগেট করুন। ফাইলনেমে ক্লিক করুন এবং তারপরে আমদানি বোতামে ক্লিক করুন। পাঠ্য আমদানি উইজার্ড - পদক্ষেপ 1 বা 3 উইন্ডো এখন স্ক্রিনে উপস্থিত হবে।
  5. ফাইলের ধরণটি চয়ন করুন যা আপনার ডেটা - সীমাবদ্ধ বা স্থির প্রস্থের সর্বোত্তম বর্ণনা করে।
  6. ফাইল উত্সের পাশে প্রদর্শিত ড্রপ-ডাউন তালিকা থেকে 65001: ইউনিকোড (ইউটিএফ -8) চয়ন করুন।
  7. পাঠ্য আমদানি উইজার্ড - পদক্ষেপ 2 বা 3 উইন্ডোটি প্রদর্শন করতে পরবর্তী বোতামে ক্লিক করুন।
  8. মাইক্রোসফ্ট এক্সেল 2007 এ আপনি যে ফাইলটি আমদানি করতে চান তাতে যে ডিলিমিটার ব্যবহার করা হয়েছিল তার পাশে একটি চেকমার্ক রাখুন Data
  9. পাঠ্য আমদানি উইজার্ড - 3 এর 3 ধাপটি প্রদর্শন করতে পরবর্তী বোতামে ক্লিক করুন।
  10. আপনি আমদানি করতে চান এমন প্রতিটি কলামের জন্য উপযুক্ত ডেটা ফর্ম্যাটটি চয়ন করুন। আপনি চাইলে এক বা একাধিক কলাম ডেটা আমদানি না করার বিকল্পও রয়েছে।
  11. মাইক্রোসফ্ট এক্সেল 2007 এ আপনার ডেটা আমদানি শেষ করতে ফিনিশ বোতামটি ক্লিক করুন।

সূত্র: https://www.itg.ias.edu/content/how-import-csv-file-uses-utf-8-character-encoding-0


3

হ্যাঁ, এটি সম্ভব। যেমনটি আগে একাধিক ব্যবহারকারীর দ্বারা উল্লিখিত ছিল, ফাইলটি ইউটিএফ -8 এ এনকোড করা হয়েছে তখন বাইট অর্ডার চিহ্নটি সঠিকভাবে পাঠ করার ক্ষেত্রে অ্যাক্সেলের সমস্যা আছে বলে মনে হচ্ছে। ইউটিএফ -১ With এর সাথে এটির কোনও সমস্যা বলে মনে হচ্ছে না, তাই এটি ইউটিএফ -8 এর জন্য স্থানীয়। আমি এর জন্য যে সমাধানটি ব্যবহার করি তা হ'ল বিওএম, টুওয়াইস। এর জন্য আমি নীচের এসড কমান্ডটি দু'বার সম্পাদন করব:

sed -I '1s/^/\xef\xbb\xbf/' *.csv

, যেখানে ওয়াইল্ডকার্ড কোনও ফাইলের নামের সাথে প্রতিস্থাপন করা যেতে পারে। তবে, এটি .csv ফাইলের শুরুতে sep = এর পরিবর্তনের দিকে নিয়ে যায়। .Csv ফাইলটি তখন সাধারণভাবে এক্সেলে খোলে তবে প্রথম ঘরে "sep =" দিয়ে অতিরিক্ত সারি থাকে। উত্স .csv নিজেই "sep =" মুছে ফেলা যায়, কিন্তু ভিবিএ দিয়ে ফাইল খোলার সময় ডিলিমিটার নির্দিষ্ট করা উচিত:

Workbooks.Open(name, Format:=6, Delimiter:=";", Local:=True)

ফর্ম্যাট 6 হ'ল .csv ফর্ম্যাট। লোকালকে সত্যে সেট করুন, যদি ফাইলটিতে তারিখ থাকে। স্থানীয়কে যদি সেট করা না হয় তবে তারিখগুলি আমেরিকানাইজড হয়ে যাবে, যা কিছু ক্ষেত্রে .csv ফর্ম্যাটকে দূষিত করবে।


1
সেড কমান্ড চালানোর সময়, আমি পেয়েছি: "সেড: অবৈধ বিকল্প - 'আমি'", আমি মনে করি এটি 'আই' হওয়া উচিত
বিআইআইবি

2

এটি আমার কাজের সমাধান:

vbFILEOPEN = "your_utf8_file.csv"
Workbooks.OpenText Filename:=vbFILEOPEN, DataType:=xlDelimited, Semicolon:=True, Local:=True, Origin:=65001

মূলটি মূল: = 65001


2

হ্যা এটা সম্ভব. স্ট্রিম সিএসভি তৈরি করার সময়, প্রথম কাজটি হ'ল:

myStream.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length)

আপনি প্রশ্নটি পড়েন নি! লিউবায়ার শায়দারিভ লিখেছেন: "আমি ইউটিএফ -8 বিওএম ইফ বিবি বিএফ নির্দিষ্ট করার চেষ্টাও করেছি, তবে এক্সেল এটিকে উপেক্ষা করে।"
এলময়ে

এটি কোডের কাজ করছে। আপনি যদি এই সীসা সহ। নেট অ্যাপ্লিকেশনগুলি থেকে UTF-8 ফাইলগুলি লিখেন, এক্সেল ফাইলটি UTF8 হিসাবে স্বীকৃতি দেবে।
জ্যাক্স

এটি আপনার এক্সেলে থাকতে পারে। তবে কমপক্ষে এক্সেল 2007 এ বিওএম সম্পূর্ণ উপেক্ষা করা হবে। সুতরাং আপনি যদি এমন কোনও কোড লিখতে চান যা সমস্ত এক্সেল সংস্করণে কাজ করে তবে আপনার কোডটি ব্যবহারযোগ্য নয় use
এলমেউ

2

উত্তরের একটি সত্যিই আশ্চর্যজনক তালিকা, তবে যেহেতু একটি খুব ভাল একটি এখনও অনুপস্থিত, আমি এখানে এটি উল্লেখ করব: গুগল শিট দিয়ে সিএসভি ফাইলটি খুলুন এবং এটিকে আপনার স্থানীয় কম্পিউটারে এক্সেল ফাইল হিসাবে সংরক্ষণ করুন।

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


2

এটি সঠিকভাবে প্রশ্নের সমাধান করছে না তবে যেহেতু আমি এটি পেরেছি এবং উপরের সমাধানগুলি আমার পক্ষে কার্যকর হয়নি বা আমার প্রয়োজনীয়তাগুলি পূরণ করতে পারেনি তাই আপনি যখন ভিমে অ্যাক্সেস পাবেন তখন এখানে বিওএম যুক্ত করার আরও একটি উপায় রয়েছে:

vim -e -s +"set bomb|set encoding=utf-8|wq" filename.csv

2

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

লিনাক্স (উবুন্টু) এবং ম্যাক দিয়ে ভাল ছিল।

আমরা সনাক্ত করেছি যে উইন্ডোজ এক্সেলকে প্রকৃত ডেটা দেখার জন্য আবার ডেটা আমদানি করা দরকার। আমদানির সময় আমরা অক্ষর সেট চয়ন করার জন্য আরও বিকল্প পাব।

তবে এটি প্রতিটি ব্যবহারকারীর জন্যই শিক্ষিত হতে পারে না, সুতরাং সমাধানের সন্ধান আমরা হ'ল ডাবল ক্লিক করে খোলার।

তারপর আমরা জানালা খোলা মোড এবং Bom দ্বারা ডেটা দেখানোর সময় প্রণালী চিহ্নিত aghuddleston সাহায্যে সীমা অতিক্রম করা সারকথা । রেফারেন্সে যুক্ত।

উদাহরণস্বরূপ I18n বিষয়বস্তু

ম্যাক এবং লিনাক্সে

সুইডিশ: ফার্মনাম ইংলিশ: প্রথম নাম

উইন্ডোজে

সুইডিশ: ফার্মনাম ইংলিশ: প্রথম নাম

def user_information_report(report_file_path, user_id)
    user = User.find(user_id)
    I18n.locale = user.current_lang
    open_mode = "w+:UTF-16LE:UTF-8"
    bom = "\xEF\xBB\xBF"
    body user, open_mode, bom
  end

def headers
    headers = [
        "ID", "SDN ID",
        I18n.t('sys_first_name'), I18n.t('sys_last_name'), I18n.t('sys_dob'),
        I18n.t('sys_gender'), I18n.t('sys_email'), I18n.t('sys_address'),
        I18n.t('sys_city'), I18n.t('sys_state'), I18n.t('sys_zip'),
        I18n.t('sys_phone_number')
    ]
  end

def body tenant, open_mode, bom
    File.open(report_file_path, open_mode) do |f|
      csv_file = CSV.generate(col_sep: "\t") do |csv|
        csv << headers
        tenant.patients.find_each(batch_size: 10) do |patient|
          csv <<  [
              patient.id, patient.patientid,
              patient.first_name, patient.last_name, "#{patient.dob}",
              "#{translate_gender(patient.gender)}", patient.email, "#{patient.address_1.to_s} #{patient.address_2.to_s}",
              "#{patient.city}", "#{patient.state}",  "#{patient.zip}",
              "#{patient.phone_number}"
          ]
        end
      end
      f.write bom
      f.write(csv_file)
    end
  end

এখানে গুরুত্বপূর্ণ বিষয়গুলি লক্ষণীয় ওপেন মোড এবং বোম

ওপেন_মোড = "w +: UTF-16LE: UTF-8"

বোম = "\ xEF \ xBB \ xBF"

সিএসভি লেখার আগে বিওএম .োকান

f.writ বোম

f.write (csv_file)

উইন্ডোজ এবং ম্যাক

ডাবল ক্লিক করে ফাইল সরাসরি খোলা যেতে পারে।

লিনাক্স (উবুন্টু)

একটি ফাইল খোলার সময় পৃথককারী বিকল্পগুলির জন্য জিজ্ঞাসা করুন -> "ট্যাব" নির্বাচন করুন এখানে চিত্র বর্ণনা লিখুন


1

কিছুদিন আগে আমি একই সমস্যার মুখোমুখি হয়েছিলাম এবং কোনও সমাধান খুঁজে পাইনি কারণ আমি import from csvবৈশিষ্ট্যটি ব্যবহার করতে পারি না কারণ এটি সবকিছুকে স্ট্রিং হিসাবে স্টাইল করে তোলে makes

আমার সমাধানটি ছিল প্রথমে নোটপ্যাড ++ এবং দিয়ে ফাইলটি খোলার change the encode to ASCII। তারপরে সবেমাত্র এক্সলে ফাইলটি ওপেন হয়েছে এবং এটি প্রত্যাশার মতো কাজ করেছে।


1

পিএইচপি-তে আপনি কেবলমাত্র আপনার s সিএসভি_ স্ট্রিংয়ের জন্য prep বোম্বকে প্রিপেন্ড করেন:

$bom = sprintf( "%c%c%c", 239, 187, 191); // EF BB BF
file_put_contents( $file_name, $bom . $csv_string );

এমএস এক্সেল 2016 এর সাথে পরীক্ষিত, পিএইচপি 7.2.4


0

এটি একটি পুরানো প্রশ্ন তবে আমি ঠিক একই ধরণের সমস্যার মুখোমুখি হয়েছি এবং সমাধানটি অন্যকে সহায়তা করতে পারে:

সিএসভি টেক্সট ডেটা কোনও ফাইলে লেখার ক্ষেত্রে একই সমস্যা ছিল, তারপরে এক্সেলে ফলাফল .csv খোলার ফলে সমস্ত পাঠ্যকে একক কলামে স্থানান্তরিত করা হবে। উপরের উত্তরগুলি পড়ার পরে আমি নিম্নলিখিতগুলি চেষ্টা করেছিলাম, যা সমস্যাটি সাজানোর জন্য মনে হচ্ছে।

আপনি যখন আপনার স্ট্রিমাইটারটি তৈরি করেন তখন ইউটিএফ -8 এর একটি এনকোডিং প্রয়োগ করুন। এটাই.

উদাহরণ:

using (StreamWriter output = new StreamWriter(outputFileName, false, Encoding.UTF8, 2 << 22)) {
   /* ... do stuff .... */
   output.Close();
}

@ একটু যত্ন করার জন্য যত্ন নিবেন? নিশ্চিতভাবেই শুরু করতে সিএসভিকে সঠিক এনকোডিং ব্যবহার করে আউটপুট আউট করে তা নিশ্চিত করে যে পরে কর্মপ্রবাহে এক্সেলের সাথে কোনও সামঞ্জস্যতার সমস্যা নেই?
রেক্স

কোডটি ভুল কারণ আপনার আউটপুট লাগবে না you আপনার যদি () স্টেটমেন্ট থাকে তবে () বন্ধ করুন। তা ছাড়া এক্সেল সিএসভি ইনপোর্টটি খুব আদিম। আমি এটি ব্যবহার করব না। আপনি যদি এক্সেলে আমদানি করতে চান তবে পরিবর্তে একটি এইচটিএমএল টেবিল ব্যবহার করুন এবং এটি এক্সলে খুলুন।
এলমিউ

@Elmue সে বিষয়ে পরিষ্কারভাবে বর্ণনা জন্য ধন্যবাদ - দুর্ভাগ্যবশত আমি (নেটওয়ার্ক ড্রাইভ জুড়ে ফাইল সহ) পরিস্থিতিতে সংখ্যা যেখানে একটি ঘনিষ্ঠ স্পষ্টভাবে প্রয়োজন বোধ করা হয় পড়েছেন সেইসাথে নিষ্পত্তি। আমি মনে করি Close()যে Disposeস্ট্যাকের মধ্যে একটি কল দেখে মনে আছে তবে কোনও কারণ খুঁজে পাওয়া যায় নি তবে আমরা সেখানে যাই। আপনি সিএসভি আমদানি আদিম হিসাবে আপনার বিবৃতিতেও ভুল কারণ এটির প্রস্তাবিত অক্ষম এইচটিএমএল পদ্ধতির প্রয়োজন হয় না। প্রকৃতপক্ষে টেক্সট তথ্য গ্রহণের জন্য অতিরিক্ত প্রোগ্রামিক পদক্ষেপ তৈরি করা, এইচটিএমএল রূপান্তরকরণের পরে এক্সেলের কাছে টানুন বিপরীতমুখী মনে হয়
রেক্স

অবিরত ... তবে, বিভিন্ন পরিস্থিতিতে বিভিন্ন প্রয়োজনীয়তা রয়েছে এবং আমার উদাহরণটি সঠিকভাবে দেখায় যে কীভাবে এনপিডির অনুরোধ অনুযায়ী এনকোডিংটি নির্দিষ্ট করা যায়
রেক্স

দয়া করে আবার আসল প্রশ্নটি পড়ুন: "আমি ইউটিএফ -8 বিওএম ইফ বিবি বিএফ নির্দিষ্ট করার চেষ্টাও করেছি, তবে এক্সেল এটিকে উপেক্ষা করে।" আমি একই পরীক্ষা করেছি এবং একই ফলতে এসেছি: এক্সেল ইউটিএফ 8 বিওএমকে স্বীকৃতি দেয় না। চেষ্টা করে দেখুন! একটি সিএসভি ফাইল লিখুন এবং এতে গ্রীক বা রাশিয়ান চার্টার লাগান। তারপরে এটি এক্সেলে খুলুন এবং আপনি গার্জে পাবেন। সুতরাং আপনার উত্তর কিছুই সমাধান করে না।
এলমিউ

0

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

আমি একটি পিএইচপি ক্লাস লিখেছিলাম যা ডেটা গ্রহণ করে এবং একটি এসওয়াইএলকে ফাইল আউটপুট করে যা কেবল এক্সেল এ সরাসরি ফাইলটি ক্লিক করে খুলবে (অথবা আপনি যদি সঠিক মাইম টাইপের সাহায্যে কোনও ওয়েব পৃষ্ঠায় ফাইলটি লিখে থাকেন তবে এক্সেলটি স্বয়ংক্রিয়ভাবে চালু করবে You আপনি এমনকি করতে পারেন) বিন্যাস যুক্ত করুন (যেমন গা bold়, নির্দিষ্ট উপায়ে ফর্ম্যাট নম্বরগুলি ইত্যাদি) এবং কলামের আকার বা কলামের টেক্সটে স্বয়ংক্রিয় আকারের কলামগুলি এবং সমস্ত কোডের মধ্যে প্রায় 100 টি লাইনের বেশি নয়।

একটি সাধারণ স্প্রেডশিট তৈরি করে এবং এসওয়াইএলকে হিসাবে সংরক্ষণ করে এবং পরে এটি কোনও পাঠ্য সম্পাদক দিয়ে পড়ে ইঞ্জিনিয়ার এসওয়াইএলকে বিপরীত করা সহজ dead প্রথম ব্লকটি শিরোনাম এবং মান সংখ্যার ফর্ম্যাটগুলি যা আপনি স্বীকৃতি পাবেন (যা আপনি নিজের তৈরি প্রতিটি ফাইলের মধ্যে পুনঃস্থাপন করেন), তবে ডেটা কেবল এক্স / ওয়াই সমন্বয় এবং একটি মান।


0
  1. LibreOffice ক্যালক ডাউনলোড ও ইনস্টল করুন
  2. আপনার পছন্দের সিএসভি ফাইলটি LibreOffice Calc এ খুলুন
  3. একটি আমদানি পাঠ্য উইজার্ড দেখিয়েছে আকাশকে ধন্যবাদ জানাই ...
  4. ... আপনার ডিলিমিটার এবং চরিত্রের এনকোডিং বিকল্পগুলি নির্বাচন করুন
  5. ক্যালকের ফলাফলের ডেটা নির্বাচন করুন এবং এক্সেলের কাছে অনুলিপি করুন

0

আমি একটি সাধারণ সি # অ্যাপ্লিকেশন থেকে সিএসভি ফাইল তৈরি করছি এবং একই সমস্যা ছিল। আমার সমাধানটি ছিল ইউটিএফ 8 এনকোডিং সহ ফাইলটি লিখিত আছে তা নিশ্চিত করা:

// Use UTF8 encoding so that Excel is ok with accents and such.
using (StreamWriter writer = new StreamWriter(path, false, Encoding.UTF8))
{
    SaveCSV(writer);
}

আমার কাছে প্রথমে নীচের কোডটি ছিল, যার সাথে অ্যাকসেন্টগুলি নোটপ্যাড ++ এ সূক্ষ্ম দেখায় তবে এক্সেলে ম্যাঙ্গেল হয়ে যাচ্ছিল:

using (StreamWriter writer = new StreamWriter(path))
{
    SaveCSV(writer);
}

আপনার মাইলেজটি পৃথক হতে পারে - আমি নেট নেট 4 এবং অফিস 365 থেকে এক্সেল ব্যবহার করছি।


0

অফিসে 365 এর কার্যকারিতা সমাধান

  • সংরক্ষণ করুন UTF-16(কোন এলই, বিই)
  • বিভাজক ব্যবহার করুন \t

পিএইচপি মধ্যে কোড

$header = ['číslo', 'vytvořeno', 'ěščřžýáíé'];
$fileName = 'excel365.csv';
$fp = fopen($fileName, 'w');
fputcsv($fp, $header, "\t");
fclose($fp);

$handle = fopen($fileName, "r");
$contents = fread($handle, filesize($fileName));
$contents = iconv('UTF-8', 'UTF-16', $contents);
fclose($handle);

$handle = fopen($fileName, "w");
fwrite($handle, $contents);
fclose($handle);

-1

প্রথমে ইউনিকোড পাঠ্য হিসাবে এক্সেল স্প্রেডশিটটি সংরক্ষণ করুন। ইন্টারনেট এক্সপ্লোরার ব্যবহার করে টিএক্সটি ফাইলটি খুলুন এবং টিএক্সটি এনকোডিংয়ের হিসাবে "সংরক্ষণ করুন" এ ক্লিক করুন - উপযুক্ত এনকোডিংটি বেছে নিন, যেমন উইন সিরিলিক 1251 এর জন্য


-1

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

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