2011-12-29 12 views
6

त्वरित पृष्ठभूमि: मुझे एक बड़ी एसक्यूएल डंप फ़ाइल मिली है जिसमें अंग्रेजी और अरबी पाठ का संयोजन होता है और (मुझे लगता है) इसे मूल रूप से 'लैटिन 1' का उपयोग करके निर्यात किया गया था। मैंने फ़ाइल आयात करने से पहले 'latin1' से 'utf8' की सभी घटनाओं को बदल दिया। अरबी पाठ phpmyadmin में सही ढंग से प्रकट नहीं किया था (जो मुझे लगता है कि सामान्य है), लेकिन जब मैं के साथ एक वेब पेज के लिए पाठ लोड निम्नलिखित ...अरबी कैरेक्टर एन्कोडिंग समस्या: यूटीएफ -8 बनाम विंडोज-1256

<meta http-equiv='Content-Type' content='text/html; charset=windows-1256'/> 

... सब कुछ अच्छा लग रहा था और अरबी पाठ पूरी तरह से प्रदर्शित किया।


समस्या: मेरा ग्राहक वास्तव में वास्तव में बहुत picky है और उसकी बदलने के लिए नहीं चाहता है ...

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 

... 'विंडोज-1256' बराबर करने के लिए। मुझे नहीं लगता कि यह एक समस्या होगी, लेकिन जब मैंने अक्षरसेट मान को 'यूटीएफ -8' में बदल दिया, तो सभी अरबी पात्र प्रश्न चिह्नों के साथ हीरे के रूप में दिखाई दिए। यूटीएफ -8 को अरबी टेक्स्ट सही ढंग से प्रदर्शित नहीं करना चाहिए?

  • डाटाबेस चारसेट है 'UTF8'
  • डेटाबेस कनेक्शन मिलान 'utf8_general_ci'
  • सभी डेटाबेस, टेबल, और लागू क्षेत्रों है:


    यहाँ मेरी डेटाबेस विन्यास के बारे में कुछ नोट दिए गए हैं 'utf8_general_ci'

के रूप में एकत्रित किया गया है मैं संबंधित कुछ भी के लिए स्टैक ओवरफ़्लो और अन्य मंचों को खराब कर रहा हूं मेरे मुद्दे पर। मुझे समान समस्याएं मिली हैं, लेकिन समाधान की मेरी विशिष्ट स्थिति के लिए काम नहीं लग रहा है। उम्मीद है कि कोई मदद कर सकता है!

+0

क्या आपने नोटपैड का उपयोग करके सहेजा था? अगर ऐसा है, तो सुनिश्चित करें कि आपने एएनएसआई के बजाय यूटीएफ -8 को एन्कोडिंग के रूप में चुना है, या फिर आप अपने अरबी पात्रों को खो सकते हैं। – SiN

उत्तर

2

यदि आप हमें अपना कोड नहीं दिखाते हैं तो हमें आपके कोड में त्रुटि नहीं मिल रही है, इसलिए हम आपकी सहायता कर सकते हैं कि हम आपकी सहायता कैसे कर सकते हैं।

आपने ब्राउजर को विंडोज-1256 की बजाय यूटीएफ -8 के रूप में दस्तावेज़ की व्याख्या करने के लिए कहा, लेकिन क्या आपने वास्तव में विंडोज-1256 से यूटीएफ -8 में उपयोग किए गए एन्कोडिंग को बदल दिया?

उदाहरण के लिए

,

$ cat a.pl 
use strict; 
use warnings; 
use feature qw(say); 
use charnames ':full'; 

my $enc = $ARGV[0] or die; 
binmode STDOUT, ":encoding($enc)"; 

print <<"__EOI__"; 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=$enc"> 
<title>Foo!</title> 
</head> 
<body dir="rtl"> 
\N{ARABIC LETTER ALEF}\N{ARABIC LETTER LAM}\N{ARABIC LETTER AIN}\N{ARABIC LETTER REH}\N{ARABIC LETTER BEH}\N{ARABIC LETTER YEH}\N{ARABIC LETTER TEH MARBUTA} 
</body> 
</html> 
__EOI__ 

$ perl a.pl UTF-8 > utf8.html 

$ perl a.pl Windows-1256 > cp1256.html 
+0

ओह, मैंने सोचा कि यह एक पर्ल सवाल था। विचार लागू होता है भले ही उदाहरण पर्ल में है। इस्तेमाल किया गया एन्कोडिंग निर्दिष्ट एन्कोडिंग से मेल खाना चाहिए। – ikegami

3

दस्तावेज़ सही लग रहा है जब घोषित विंडोज़ -1256 इनकोडिंग के रूप में है, तो यह सबसे शायद विंडोज़ -1256 इनकोडिंग है। इसलिए यह स्पष्ट रूप से लैटिन 1 का उपयोग करके निर्यात नहीं किया गया था-जो असंभव होता, क्योंकि लैटिन 1 में कोई अरबी अक्षर नहीं होता है।

यदि यह केवल एक फ़ाइल के बारे में है, तो सबसे सरल तरीका यह है कि इसे विंडोज-1256 एन्कोडिंग से यूटीएफ -8 एन्कोडिंग में परिवर्तित करना है, उदाहरण के लिए Notepad++। (इसमें फ़ाइल खोलें, फ़ाइल प्रारूप मेनू के माध्यम से, एन्कोडिंग को अरबी, विंडोज-1256 में बदलें। फिर फ़ाइल प्रारूप मेनू में यूटीएफ -8 में कनवर्ट करें और फ़ाइल → सहेजें।)

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

2

मुझे लगता है कि आपको स्क्वायर वन पर वापस जाने की आवश्यकता है।ऐसा लगता है कि आपके पास Win-1256 एन्कोडिंग में डेटाबेस डंप है और आप अब से यूटीएफ -8 में इसके साथ काम करना चाहते हैं। ऐसा लगता है कि आप PHP का उपयोग कर रहे हैं लेकिन आपके प्रश्न पर आपके बहुत सारे अप्रासंगिक टैग हैं और सबसे महत्वपूर्ण एक, PHP गायब हैं।

सबसे पहले, आपको टेक्स्ट डंप को यूटीएफ -8 में परिवर्तित करने की आवश्यकता है और आपको PHP के साथ ऐसा करने में सक्षम होना चाहिए। संभावना है कि आपकी रूपांतरण स्क्रिप्ट में दो चरण होंगे, पहले Win-1256 बाइट्स को पढ़ें और उन्हें आंतरिक यूनिकोड टेक्स्ट स्ट्रिंग में डीकोड करें, फिर यूनिकोड टेक्स्ट स्ट्रिंग को आउटपुट के लिए यूटीएफ -8 बाइट्स में एक नई टेक्स्ट फ़ाइल में एन्कोड करें।

एक बार ऐसा करने के बाद, डेटाबेस आयात को फिर से करें जैसा आपने पहले किया था, लेकिन अब आपने इनपुट डेटा को यूटीएफ -8 के रूप में सही ढंग से एन्कोड किया है।

इसके बाद यह डेटाबेस को पढ़ने और सही यूटीएफ -8 एन्कोडिंग के साथ एक वेब पेज प्रस्तुत करने जितना सरल होना चाहिए।

पीएस हर बार जब आप इसे प्रदर्शित करते हैं तो डेटा को फिर से कोड करना संभव है, लेकिन यह गलत तरीके से एन्कोड किए गए डेटा से भरा डेटाबेस रखने की समस्या का समाधान नहीं करता है।

0

inorder सही ढंग से अरबी वर्ण प्रदर्शित करने के लिए, आप बोम यह मेरे साथ हुआ, अरबी वर्ण हीरे प्रदर्शित किया गया था बिना utf-8 करने के लिए अपने php फ़ाइल बदलने की जरूरत है, लेकिन bom बिना utf-8 के लिए रूपांतरण इस समस्या का समाधान होगा

संबंधित मुद्दे