"UTF8" এনকোডিংয়ের জন্য অবৈধ বাইট অনুক্রম


124

আমি আমার ডাটাবেসে কিছু ডেটা আমদানির চেষ্টা করছি । সুতরাং আমি একটি অস্থায়ী টেবিল তৈরি করেছি,

create temporary table tmp(pc varchar(10), lat decimal(18,12), lon decimal(18,12), city varchar(100), prov varchar(2));

এবং এখন আমি ডেটা আমদানি করার চেষ্টা করছি ,

 copy tmp from '/home/mark/Desktop/Canada.csv' delimiter ',' csv

তবে আমি ত্রুটি পেয়েছি,

ERROR:  invalid byte sequence for encoding "UTF8": 0xc92c

আমি কীভাবে এটি ঠিক করব? আমার কি আমার পুরো ডাটাবেসের এনকোডিং পরিবর্তন করা দরকার (যদি তাই হয় তবে কীভাবে?) বা আমি আমার tmpটেবিলের কেবল এনকোডিং পরিবর্তন করতে পারি ? বা ফাইলটির এনকোডিংটি পরিবর্তন করার চেষ্টা করা উচিত?


আমদানিতে এনকোডিং বিকল্পটি পরিবর্তন করুন। আমি "উইন্ডোজ -1211" তে আমার সেট করেছিলাম এবং এটি অভিযোগ ছাড়াই কাজ করেছে।
ব্রায়ান ডি

1
ধন্যবাদ @ ব্রায়ানডি, আমিও এই সমস্যার মুখোমুখি হয়েছি এবং এটি আমার পক্ষে কাজ করেছে।
gouravkr

উত্তর:


109

আপনার যদি আপনার ডাটাবেসে ইউটিএফ 8 ডেটা সঞ্চয় করতে হয় তবে আপনার এমন একটি ডাটাবেস দরকার যা ইউটিএফ 8 গ্রহণ করে। আপনি pgAdmin এ আপনার ডাটাবেসের এনকোডিং পরীক্ষা করতে পারেন। ডাটাবেসটিতে কেবল ডান-ক্লিক করুন এবং "সম্পত্তি" নির্বাচন করুন।

তবে এই ত্রুটিটি আপনার উত্স ফাইলে কিছু অবৈধ ইউটিএফ 8 ডেটা বলেছিল বলে মনে হচ্ছে। এর অর্থ হল যে copyইউটিলিটিটি সনাক্ত করেছে বা অনুমান করেছে যে আপনি এটি কোনও ইউটিএফ 8 ফাইল খাচ্ছেন।

আপনি যদি ইউনিক্সের কিছু বৈকল্পিকের অধীনে চলতে থাকেন তবে আপনি fileইউটিলিটি সহ এনকোডিং (কম বেশি) পরীক্ষা করতে পারেন ।

$ file yourfilename
yourfilename: UTF-8 Unicode English text

(আমি মনে করি এটি টার্মিনালে ম্যাকগুলিতেও কাজ করবে)) উইন্ডোজের অধীনে কীভাবে এটি করবেন তা নিশ্চিত নয়।

যদি আপনি উইন্ডোজ সিস্টেম থেকে আগত কোনও ফাইলটিতে (যেমন, ইউটিএফ 8 এ এনকোড করা হয়নি এমন একটি ফাইল ) ব্যবহার করেন তবে এটি সম্ভবত এর মতো কিছু দেখাবে:

$ file yourfilename
yourfilename: ASCII text, with CRLF line terminators

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

আপনি iconvইনপুট ডেটার এনকোডিং পরিবর্তন করতে ইউটিলিটিটি ব্যবহার করতে পারেন ।

iconv -f original_charset -t utf-8 originalfile > newfile

ক্যারেক্টার সেট সাপোর্টের নির্দেশাবলী অনুসরণ করে আপনি পিএসকিএল (ক্লায়েন্ট) এনকোডিং পরিবর্তন করতে পারেন । সেই পৃষ্ঠায়, "স্বয়ংক্রিয় অক্ষর সেট রূপান্তর সক্ষম করতে" বাক্যাংশটি অনুসন্ধান করুন।


3
বলেছে ফাইলটি ASCII, তবে এতে উচ্চারণযুক্ত অক্ষর রয়েছে, তাই ভুল হওয়া উচিত?
এমপেন

2
এই উত্তরটি গ্রহণ করবে, তবে আমি মনে করি সমস্যাটি আসলে ডেটা নিয়ে ছিল (আপডেট কিউ)।
এমপেন

1
ধন্যবাদ আমি এই সহায়ক পেয়েছি। যাইহোক, এটি ওএস এক্স টার্মিনালগুলিতেও চালিত হয়
রাউল রিনি

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

1
কেবল অন্যকে এবং অনুসন্ধান ইঞ্জিনগুলিকে সহায়তা করার জন্য: এটি অপঠনযোগ্য অক্ষরগুলির সাথে একটি স্ট্রাইপ সিএসভি রফতানিটিকে ইউটিএফ -8 এ ফিরে রূপান্তরিত করতে কাজ করে: `আইকনভি -f আইএসও -8859-15 -t utf-8 গ্রাহকগণ-সিএসভি> গ্রাহকরা- utf8.csv`
sscarduzio

57
psql=# copy tmp from '/path/to/file.csv' with delimiter ',' csv header encoding 'windows-1251';

যোগ করার encodingবিকল্পটি আমার ক্ষেত্রে কাজ করেছে।


1
এটি ত্রুটি ছাড়াই সম্পূর্ণ হবে, এটি কার্যকর ফলাফল দিতে বা নাও পারে। আপনার ডেটাটির উদ্দেশ্যযুক্ত এনকোডিংটি জানতে হবে।
জেসেন

1
আমার দৃশ্যে উপরের প্রশ্নগুলি কীভাবে কাজ করেছিল? আমি ইউএসএফ 8 এর সাথে সিএসভি ফাইল এনকোড করেছি এবং ডিবি ইউটিএফ 8 এর সাথে এনকোড করেছে।
অজয় টাকুর

14

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

 set client_encoding to 'latin1'

এবং তারপরে পুনরায় রান করুন query যদিও আমার এনকোডিংটি ব্যবহার করা উচিত তা নিশ্চিত নয়।


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


মজার বিষয় হচ্ছে, আমি একটি নির্বাচনী বিবৃতিতে ত্রুটি পেয়েছি! এটি এটি সমাধান করেছে কারণ এটি আমার পিএসকিএল ক্লায়েন্টটি ত্রুটিটি দিয়েছে, ডাটাবেসটি নিজেই নয়। (যা এনকোডিংটি নিষিদ্ধ করলে প্রথমে ডেটা প্রত্যাখাত হত))
ওয়াইল্ডকার্ড

14

আপনি যদি অবিচ্ছিন্ন অক্ষরগুলি ত্যাগ করতে ঠিক থাকেন তবে আপনি -cপতাকা ব্যবহার করতে পারেন

iconv -c -t utf8 filename.csv > filename.utf8.csv

এবং তারপরে সেগুলি আপনার টেবিলে অনুলিপি করুন


ম্যাকে এটি আমার iconv -c -t UTF-8 filename.csv > filename.utf8.csvজন্য ছিল
মাইকেল

8

এই ত্রুটিটির অর্থ এই যে সংযোগের ক্ষেত্রে ফাইলটিতে রেকর্ডগুলি এনকোডিং আলাদা। এই ক্ষেত্রে আইকনভিভ ত্রুটিটি ফিরিয়ে আনতে পারে, কখনও কখনও // আইজিএনওর পতাকা সত্ত্বেও:

iconv -f ASCII -t utf-8 // IGNORE <b.txt> /a.txt

আইকনভিভি: অবস্থান অবৈধ ইনপুট ক্রম (কিছু সংখ্যা)

কৌশলটি হ'ল ভুল অক্ষরগুলি সন্ধান করা এবং এটি প্রতিস্থাপন করা। লিনাক্সে এটি করতে "vim" সম্পাদক ব্যবহার করুন:

ভিম (আপনার পাঠ্য ফাইল), "ESC" টিপুন: বোতামটি এবং টাইপ করুন ": গেটো (আইকনভি দ্বারা ফিরে আসা নম্বর)"

নন ASCII অক্ষর সন্ধান করতে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

গ্রেপ - রঙ = 'অটো' -পি "[\ x80- \ xFF]"

আপনি যদি ভুল অক্ষরগুলি অপসারণ করেন তবে দয়া করে আপনার ফাইলটি রূপান্তর করতে হবে কিনা তা পরীক্ষা করে দেখুন: সম্ভবত সমস্যাটি ইতিমধ্যে সমাধান হয়ে গেছে।


iconv -c -f utf8 -t utf8//IGNORE < dirty.txt > clean.txt
জেসেন

5

প্যাগাডমিনে এই সমস্যাটি সমাধান করার জন্য নীচের পদক্ষেপগুলি অনুসরণ করুন:

  1. SET client_encoding = 'ISO_8859_5';

  2. COPY tablename(column names) FROM 'D:/DB_BAK/csvfilename.csv' WITH DELIMITER ',' CSV ;


4

এটি আপনার আমদানি ফাইলটি কী ধরণের মেশিন / এনকোডিংয়ের উপর নির্ভর করে।

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

http://www.postgresql.org/docs/8.3/static/multibyte.html

আপনি যদি এটি কোনও ম্যাক থেকে পেয়ে থাকেন তবে ম্যাকরোমেন থেকে ইউটিএফ -8 এ রূপান্তর করতে আপনাকে প্রথমে এটি "আইকনভি" ইউটিলিটির মাধ্যমে চালাতে হতে পারে।


4

ঠিক আছে আমি একই সমস্যার মুখোমুখি ছিলাম। এবং আমার সমস্যার সমাধান কী তা হ'ল:

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


3

আমারও একই সমস্যা ছিল এবং আমি এখানে একটি দুর্দান্ত সমাধান পেয়েছি: http://blog.e-shell.org/134

এটি আপনার ডাটাবেস এনকোডিংগুলিতে একটি অমিলের কারণে ঘটেছিল, কারণ আপনি যে ডাটাবেসটি থেকে এসকিউএল ডাম্প পেয়েছিলেন সেটিকে এসকিউএল_এএসসিআইআই হিসাবে এনকোড করা হয়েছিল যখন নতুনটি ইউটিএফ 8 হিসাবে এনকোড করা হয়েছে। .. রিকোড হ'ল জিএনইউ প্রকল্পের একটি ছোট সরঞ্জাম যা আপনাকে প্রদত্ত ফাইলটির এনকোডিংটি অন-ফ্লাইয়ে পরিবর্তন করতে দেয়।

সুতরাং আমি ডাম্পফিলটি আবার খেলার আগে পুনরায় সংশোধন করেছি:

postgres> gunzip -c /var/backups/pgall_b1.zip | recode iso-8859-1..u8 | psql test

ডেবিয়ান বা উবুন্টু সিস্টেমে প্যাকেজের মাধ্যমে পুনরায় কোড ইনস্টল করা যেতে পারে।


2

আপনি ব্যাকস্ল্যাশ চরিত্রটি প্রতিস্থাপন করতে পারেন, উদাহরণস্বরূপ একটি পাইপ চরিত্র, সেড সহ।

sed -i -- 's/\\/|/g' filename.txt

2
copy tablename from 'filepath\filename' DELIMITERS '=' ENCODING 'WIN1252';

আপনি এটি ইউটিএফ 8 এনকোডিং পরিচালনা করতে চেষ্টা করতে পারেন।


2

পিএইচপি- এ এই সমস্যার সমাধানের সংক্ষিপ্ত উদাহরণ

$val = "E'\377'";
iconv(mb_detect_encoding($val, mb_detect_order(), true), "UTF-8", $val);

ত্রুটির বিবরণ: পোস্টগ্রিস ডাটাবেসটি ইউটিএফ -8 অক্ষর ব্যতীত অন্য কোনও হ্যান্ডেল না করে যখন আমরা কোনও কলামে উপরের প্রদত্ত ইনপুটগুলি "ইউটিএফ 8": 0xab "এনকোডিংয়ের জন্য অবৈধ বাইট ক্রমটির ত্রুটি দেয়।

সুতরাং POSTGRES ডাটাবেসে সন্নিবেশ করার আগে কেবল সেই মানটিকে ইউটিএফ -8 এ রূপান্তর করুন।


2

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

"এনকোডিং" এ যান এবং "ইউটিএফ -8 এ রূপান্তর করুন" নির্বাচন করুন। পরিবর্তনগুলি সংরক্ষণ করুন এবং এগুলিই!


1

এই ত্রুটিটি ঘটতে পারে যদি ইনপুট ডেটাতে নিজেই পালানোর অক্ষর থাকে। ডিফল্টরূপে পালিয়ে যাওয়া অক্ষরটি "\" প্রতীক, সুতরাং যদি আপনার ইনপুট পাঠ্যে "\" অক্ষর থাকে - তবে ESCAPE বিকল্পটি ব্যবহার করে ডিফল্ট মান পরিবর্তন করার চেষ্টা করুন।


1

অজগর জন্য, আপনি ব্যবহার করা প্রয়োজন

ক্লাস pg8000.tyype.Bytea (str) বাইটিয়া একটি স্ট্র-ডেরিভড বর্গ যা একটি পোস্টগ্রাইএসকিউএল বাইট অ্যারে ম্যাপ করা হয়।

অথবা

Pg8000.Binary (মান) বাইনারি ডেটা ধারণ করে একটি অবজেক্ট তৈরি করুন।


1

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

setx PGCLIENTENCODING UTF8

পরিবর্তনটি কার্যকর হওয়ার জন্য আপনার কমান্ড প্রম্পট / পাওয়ারশেলটি বন্ধ এবং পুনরায় খুলুন।

নোটপ্যাড দিয়ে এটি খুলুন এবং ফাইল -> সেভ হিসাবে সংরক্ষণ করে ইউনিকোড থেকে ইউটিএফ 8 এ ব্যাকআপ ফাইলটির এনকোডিং পরিবর্তন করুন। ইউনিকোড থেকে ইউটিএফ 8 এ এনকোডিং ড্রপডাউনটি পরিবর্তন করুন। (আপনার ব্যাকআপ ফাইলের নামে .txt এক্সটেনশনটি এড়াতে যাতে পাঠ্য নথির (.txt) থেকে সমস্ত ফাইলগুলিতে সংরক্ষণ করুন তেমন পরিবর্তন করুন)। আপনার এখন আপনার ব্যাকআপটি পুনরুদ্ধার করতে সক্ষম হওয়া উচিত।


0

এই ত্রুটিটির মাধ্যমে ক্ষেত্রটি জায়গায় এনক্রিপ্ট করা খুব সম্ভব। নিশ্চিত হয়ে নিন যে আপনি ডান টেবিলটি দেখছেন, কিছু ক্ষেত্রে প্রশাসকরা একটি এনক্রিপ্ট না করা দৃশ্য তৈরি করবেন যা আপনি পরিবর্তে ব্যবহার করতে পারেন। আমি সম্প্রতি খুব অনুরূপ একটি সমস্যার মুখোমুখি হয়েছি।


0

আমি যখন এক্সেল দ্বারা উত্পাদিত সিএসভি একটি পোস্টগ্রিস টেবিলের (সমস্ত ম্যাকের মধ্যে) অনুলিপি করার চেষ্টা করছিলাম তখন আমি একই ত্রুটি পেয়েছি। এইভাবে আমি এটি সমাধান করেছি:

1) এটমে ফাইলটি খুলুন (আমি যে আইডিই ব্যবহার করি)

2) ফাইলটিতে একটি তুচ্ছ পরিবর্তন করুন। ফাইলটি সংরক্ষণ করুন। পরিবর্তনটি পূর্বাবস্থায় ফেরান। আবার সংরক্ষণ করুন

Presto! কপি কমান্ড এখন কাজ করে।

(আমি মনে করি এটিম এটিকে এমন ফর্ম্যাটে সংরক্ষণ করেছিল যা কাজ করে)


0

নোটপ্যাড ++ দ্বারা ফাইল সিএসভি খুলুন। মেনু চয়ন করুন Encoding\Encoding in UTF-8 , তারপর কয়েক সেল manuallly সমাধান করুন।

তারপরে আবার আমদানির চেষ্টা করুন।


0

আপনার CSV SQL সার্ভার থেকে রপ্তানি হতে যাচ্ছে, এটা বিশাল, এবং এটা ইউনিকোড অক্ষর আছে, আপনি এনকোডিং সেটিং দ্বারা এটি রপ্তানি করতে পারেন UTF-8:

Right-Click DB > Tasks > Export > 'SQL Server Native Client 11.0' >> 'Flat File Destination > File name: ... > Code page: UTF-8 >> ...

পরবর্তী পৃষ্ঠায় এটি জিজ্ঞাসা করে যে আপনি কোনও টেবিল থেকে ডেটা অনুলিপি করতে চান বা আপনি কোয়েরি লিখতে চান কিনা। আপনার টেবিলে যদি আপনার কাছে charবা varcharডেটা প্রকার থাকে তবে ক্যোয়ারী বিকল্পটি নির্বাচন করুন এবং সেইগুলি হিসাবে কলামগুলি কাস্ট করুন nvarchar(max)। উদাহরণস্বরূপ, যদি myTableদুটি কলাম থাকে যেখানে প্রথমটি varcharদ্বিতীয় এবং দ্বিতীয়টি থাকে int, আমি প্রথমটিকে এখানে castালাই nvarchar:

select cast (col1 as nvarchar(max)) col1
       , col2
from myTable
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.