दिलचस्प पोस्ट
SQL में शून्य == नल प्राप्त करें स्ट्रिंग में उपस्ट्रिंग के nth घटना बदलें कैटमुल-रोम वक्र कोई cusps और कोई आत्म-चौराहों के साथ malloc (0) क्या करता है? WCF ट्रेसिंग को कैसे चालू करें? जावास्क्रिप्ट getElementByID () काम नहीं कर रहा है अस्वीकृत getCellType के लिए विकल्प ऑफ़स्क्रीन भागों सहित UIScrollView का स्क्रीनशॉट प्राप्त करना एंड्रॉइड: स्क्रीन के लिए प्रसारण रिसीवर और स्क्रीन बंद पायथन अनुरोध अनुरोध। Exceptions.SSLError: _ssl.c: 504: प्रोटोकॉल का उल्लंघन हुआ है EOF जैक्सन का इस्तेमाल करते हुए जेएस तिथि को कैसे हटाना है? Numpy.array आकार (R, 1) और (आर,) में अंतर रीडटाइम में उपप्रोसेस से स्टडआउट को पकड़ना दिनांक ऑब्जेक्ट को अंकीय वस्तुओं में बदलने से ifelse () को रोकने के लिए SQLAlchemy: फ्लश () और प्रतिबद्ध () के बीच अंतर क्या है?

यूटीएफ -8 पात्रों के साथ परेशानी; मैं जो देखता हूं वह नहीं है जो मैंने संग्रहीत किया है

मैंने यूटीएफ -8 का इस्तेमाल करने की कोशिश की और मुसीबत में भाग लिया।

मैंने बहुत सी चीजों की कोशिश की है; यहां दिए गए परिणाम मुझे मिले हैं:

  • ???? एशियाई अक्षरों के बजाय यहां तक ​​कि यूरोपीय पाठ के लिए, मुझे सी मिला है Se?or Señor लिए
  • अजीब गड़बड़ ( Señor ?) जैसे कि Señor या 新浪新闻 新浪新闻 新浪新闻 लिए
  • काले हीरे, जैसे सेटर
  • आखिरकार, मैं उस स्थिति में आया जहां डेटा खो गया था, या कम से कम छोटा किया गया था: Se for Señor
  • यहां तक ​​कि जब मुझे सही देखने के लिए पाठ मिला, तो यह सही ढंग से ठीक नहीं हुआ।

मैं क्या गलत कर रहा हूं? मैं कोड को कैसे ठीक कर सकता हूं? क्या मैं डेटा पुनर्प्राप्त कर सकता हूं, यदि हां, तो कैसे?

वेब के समाधान से एकत्रित समाधान "यूटीएफ -8 पात्रों के साथ परेशानी; मैं जो देखता हूं वह नहीं है जो मैंने संग्रहीत किया है"

यह समस्या इस साइट के प्रतिभागियों को विपत्ति देती है, और कई अन्य।

आपने CHARACTER SET परेशानियों के पांच मुख्य मामलों को सूचीबद्ध किया है।

सर्वश्रेष्ठ प्रणालियां

आगे जाकर, CHARACTER SET utf8mb4 और COLLATION utf8mb4_unicode_520_ci का उपयोग करना सबसे अच्छा है (पाइप लाइन में यूनिकोड मिलान का एक नया संस्करण है।)

utf8mb4 utf8 का एक सुपरसेट है जिसमें यह 4-बाइट यूटीफ़ 8 कोड संभालता है, जो इमोजी और कुछ चीनी द्वारा आवश्यक हैं

MySQL के बाहर, "UTF-8" सभी आकार के एन्कोडिंग को संदर्भित करता है, इसलिए प्रभावी रूप से MySQL के utf8mb4 के utf8mb4 , utf8 नहीं।

मैं उन वर्तनी और पूंजीकरणों का उपयोग करने के लिए निम्नलिखित बनाम MySQL के अंदर के अंदर अलग करने की कोशिश करेगा।

आपको क्या करना चाहिए का अवलोकन

  • अपने संपादक, आदि को यूटीएफ -8 पर सेट करें
  • एचटीएमएल रूपों को शुरू करना चाहिए जैसे <form accept-charset="UTF-8">
  • अपने बाइट्स को यूटीएफ -8 के रूप में एन्कोड किया गया है
  • क्लाइंट में एन्कोडिंग के उपयोग के रूप में यूटीएफ -8 की स्थापना करें।
  • कॉलम / टेबल को CHARACTER SET utf8mb4 ( SHOW CREATE TABLE साथ की जाँच करें) की घोषणा करें।
  • HTML की शुरुआत में <meta charset=UTF-8>

यूटीएफ -8 सभी तरह से (पूर्व में "utf8 सभी तरह से" कहा जाता है)

कंप्यूटर भाषाओं (और इसके निम्नलिखित अनुभागों) के लिए अधिक विवरण

डेटा का परीक्षण करें

उपकरण के साथ या SELECT साथ डेटा को देखने पर भरोसा नहीं किया जा सकता। बहुत सारे ऐसे क्लाइंट, विशेष रूप से ब्राउज़र, गलत एन्कोडिंग के लिए क्षतिपूर्ति करने का प्रयास करते हैं, और यदि आप डेटाबेस को उलझन में डालते हैं तो भी आपको पाठ सही दिखाते हैं। इसलिए, एक तालिका और स्तंभ चुनें जिसमें कुछ गैर-अंग्रेज़ी पाठ है और करें

 SELECT col, HEX(col) FROM tbl WHERE ... 

ठीक से संग्रहीत UTF-8 के लिए हेक्स होगा

  • रिक्त स्थान के लिए (किसी भी भाषा में): 20
  • अंग्रेजी के लिए: 4x , 5x , 6x , या 7x
  • अधिकांश पश्चिमी यूरोप के लिए, उच्चारण किए गए पत्रों को Cxyy होना चाहिए
  • सिरिलिक, हिब्रू, और फारसी / अरबी: Dxyy
  • एशिया के अधिकांश: Exyyzz
  • इमोजी और कुछ चीनी: F0yyzzww
  • अधिक जानकारी

देखा गया समस्याओं के विशिष्ट कारण और सुधार

छोटा पाठ ( Se लिए Se ):

  • संग्रहीत करने के लिए बाइट्स को यूटीएफ 8 एमबी 4 के रूप में एन्कोड नहीं किया जाता है। इसे ठीक करो।
  • इसके अलावा, जांच लें कि पढ़ने के दौरान कनेक्शन यूटीएफ -8 है

प्रश्न चिह्नों के साथ काले हीरे ( Se or लिए Señor ); इनमें से एक केस मौजूद है:

केस 1 (मूल बाइट्स यूटीएफ -8 नहीं थे):

  • संग्रहीत करने के लिए बाइट्स को यूटीएफ 8 के रूप में एन्कोड नहीं किया जाता है। इसे ठीक करो।
  • INSERT और SELECT लिए कनेक्शन (या SET NAMES ) utf8 / utf8mb4 नहीं था। इसे ठीक करो।
  • इसके अलावा, जांच लें कि डेटाबेस में कॉलम में CHARACTER SET utf8 यूटीएफ 8 (या यूटीएफ 8 एमबी 4) है।

केस 2 (मूल बाइट्स यूटीएफ -8 थे ):

  • SELECT लिए कनेक्शन (या SET NAMES ) utf8 / utf8mb4 नहीं था। इसे ठीक करो।
  • इसके अलावा, जांच लें कि डेटाबेस में कॉलम में CHARACTER SET utf8 यूटीएफ 8 (या यूटीएफ 8 एमबी 4) है।

ब्लैक हीरे तब होते हैं जब ब्राउजर को <meta charset=UTF-8> सेट किया जाता है।

प्रश्न चिह्न (नियमित रूप से, काले हीरे नहीं) ( Se?or Señor ):

  • संग्रहीत करने के लिए बाइट्स को यूटीएफ 8 / यूटीएफ 8 एमबी 4 के रूप में एन्कोड नहीं किया गया है। इसे ठीक करो।
  • डाटाबेस में कॉलम CHARACTER SET utf8 यूटीएफ 8 (या यूटीएफ 8 एमबी 4) नहीं है। इसे ठीक करो। ( SHOW CREATE TABLE उपयोग करें का उपयोग करें।)
  • इसके अलावा, जांच लें कि पढ़ने के दौरान कनेक्शन यूटीएफ -8 है

Señor ( Señor Señor ): (यह चर्चा भी डबल एन्कोडिंग पर लागू होती है, जो जरूरी नहीं दिखती है।)

  • संग्रहीत करने के लिए बाइट्स को यूटीएफ -8-एन्कोडेड होना चाहिए। इसे ठीक करो।
  • जब INSERTing और पाठ SELECTing तो कनेक्शन utf8 या utf8mb4 निर्दिष्ट करने की आवश्यकता है। इसे ठीक करो।
  • कॉलम को CHARACTER SET utf8 (या utf8mb4) घोषित करने की आवश्यकता है। इसे ठीक करो।
  • HTML को <meta charset=UTF-8> साथ शुरू करना चाहिए।

यदि डेटा सही दिखता है, लेकिन ठीक तरह से सॉर्ट नहीं करेगा, तो या तो आपने गलत मिलान लिया है या कोई ज़रूरत नहीं है जो आपकी आवश्यकता के अनुरूप है, या आपके पास डबल एन्कोडिंग है

डबल एन्कोडिंग को SELECT .. HEX .. वर्णित किया जा सकता है SELECT .. HEX .. ऊपर वर्णित है।

 é should come back C3A9, but instead shows C383C2A9 The Emoji 👽 should come back F09F91BD, but comes back C3B0C5B8E28098C2BD 

यह है, हेक्स के बारे में दो बार के रूप में यह होना चाहिए। यह लैटिन 1 (या जो भी) से यूटीएफ 8 में परिवर्तित करने के कारण होता है, फिर उन बाइट्स का इलाज करना जैसे कि वे लैटिन 1 थे और रूपांतरण दोहरा रहे थे सॉर्टिंग (और तुलना) सही तरीके से काम नहीं करती क्योंकि यह है, उदाहरण के लिए, सॉर्टिंग जैसे स्ट्रिंग Señor

डेटा को फिक्स करना, जहां संभव हो

टंकण और प्रश्न चिह्नों के लिए , डेटा खो जाता है।

मोजिबाक / डबल एन्कोडिंग के लिए , …

काले हीरे के लिए , …

(मुझे इसे दूसरे प्रश्न / उत्तर में जारी रखना होगा।)

मजेदार कैसे आप अपने खुद के सवाल का जवाब 🙂

1 – अपनी कोड आईडीई भाषा को यूटीएफ 8 पर सेट करें

2 – अपने वेबपेज हेडर में जोड़ें, जहां आप डेटा फॉर्म जमा करते हैं।

3 – अपनी MySQL तालिका परिभाषा की जाँच करें इस तरह दिखता है:

 CREATE TABLE your_table ( ... ) ENGINE=InnoDB DEFAULT CHARSET=utf8 

4 – यदि आप पीडीओ का उपयोग कर रहे हैं, तो सुनिश्चित करें

 $options = array(PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES utf8'); $dbL = new PDO($pdo, $user, $pass, $options); 

यदि आपको पहले से ही ऊपर समस्या वाला एक बड़ा डेटाबेस मिला है, तो आप एसडीयू को सही वर्णसेट के साथ निर्यात करने का प्रयास कर सकते हैं, और यूटीएफ 8 के साथ वापस आयात कर सकते हैं। सौभाग्य

सर्वर कैसे सेटअप है इसके आधार पर आपको सांकेतिक रूप से बदलना होगा। utf8 से जो आपने कहा था कि सबसे अच्छा काम करना चाहिए, लेकिन यदि आपके अजीब अक्षर मिलते हैं तो यह वेबपेज एन्ोडोड को एन्डीआई में बदलने में मदद कर सकता है। यह मेरी मदद करता है जब मैं एक पीएचपी एमआईएसक्यूएलआई स्थापित कर रहा था, इससे आपको अधिक समझने में मदद मिल सकती है https://superuser.com/questions/762473/ansi-to-utf-8-in-notepad