PHP में utf-8 को एक-बाइट बाइनरी में कनवर्ट करें

मेरे पास बहुत सारी छवियां हैं जिन्हें SQL डंप से utf-8 एन्कोडिंग के साथ आयात किया गया है। इस प्रकार, जेपीईजी छवियों की शुरुआत में "एफएफ डी 8 एफएफ ई0" के बजाय मुझे "सी 3 बीएफ सी 3 98 सी 3 बीएफ सी 3 ए 0" दिखाई देता है।

मैंने iconv ('utf-8', 'iso-8859-1', $ डेटा) का प्रयास किया है, लेकिन यह पूरी फ़ाइल को परिवर्तित नहीं करता है (utf-8 में वर्ण हैं जिन्हें आईएसओ -885 9 -1 में परिवर्तित नहीं किया जा सकता है।

मैं यूटीएफ -8 को सरल से एक-बाइट बाइनरी को अनदेखा करने के लिए एन्कोडिंग के साथ कैसे परिवर्तित कर सकता हूं?

0
अगर छवियों को वास्तव में आईएसओ -885 9 -1 पाठ के रूप में माना जाता था और डेटाबेस को यूटीएफ -8 पाठ के रूप में लिखा गया था, और आप उन्हें वापस परिवर्तित नहीं कर सकते हैं, तो कुछ अजीब है। उन्हें उलटा होना चाहिए - इससे कोई फर्क नहीं पड़ता कि utf-8 में सभी वर्ण आईएसओ -885 9 -1 में प्रतिनिधित्व योग्य नहीं हैं, क्योंकि केवल Io-8859- 1 स्रोत छवियों में पाया जा सकता था क्योंकि वे इलाज आईएसओ -885 9 -1 के रूप में थे। कौन से पात्र आपको समस्याएं दे रहे हैं? साथ ही, मुझे उम्मीद है कि यह एन्कोडिंग के बावजूद छवियों को टेक्स्ट के रूप में नहीं माना जाना चाहिए। :)
जोड़ा लेखक bzlm, स्रोत
@Epsiloncool, क्या आप हमारे लिए प्रयोग करने के लिए ऑनलाइन छवियों में से एक डाल सकते हैं? आपके उदाहरण से, ऐसा लगता है कि पहले दो बाइट कम से कम सफलतापूर्वक और उलटा-बदलकर आईएसओ -885 9 -1 या विंडोज -1252 (या कुछ अन्य 8-बिट एन्कोडिंग जिसमें ÿ और Ø शामिल हैं) utf-8 में परिवर्तित हो गए थे।
जोड़ा लेखक bzlm, स्रोत
@ आर्टूर दुर्भाग्य से मेरे पास कोई छवि मूल नहीं है।
जोड़ा लेखक Epsiloncool, स्रोत
@bzlm धन्यवाद। मैंने अपने पहले संदेश में कुछ छवियां जोड़ दी हैं। किसी भी सहायता की सराहना की जाएगी।
जोड़ा लेखक Epsiloncool, स्रोत
प्रारंभिक एन्कोडिंग स्पेनिश लैटिन (आईएसओ -885 9 -1) हो सकती है लेकिन मैं इसे परिवर्तित नहीं कर सकता।
जोड़ा लेखक Epsiloncool, स्रोत
आपको एन्कोडिंग को जानने की आवश्यकता है जिसे यूटीएफ -8 में परिवर्तित करते समय इस्तेमाल किया गया था
जोड़ा लेखक njzk2, स्रोत
अगर मैं आप थे तो मैं बस यूटीएफ 8 के रूप में एन्कोड किए गए चित्रों को स्टोर नहीं करता। यह यहां सभी समस्याओं को हल करता है।
जोड़ा लेखक Artur, स्रोत
@Epsiloncool: यदि इनपुट डेटा (छवि बाइट्स) को यूटीएफ 8 में परिवर्तित कर दिया गया था, जैसे कि प्रत्येक बाद के बाइट मान को यूनिकोड कोड पॉइंट के रूप में माना जाता था - ऑपरेशन पूरी तरह से काम नहीं कर सकता है। रास्ते में कहीं भी शामिल कुछ अतिरिक्त ऑपरेशन होना चाहिए। हमें फ़ील्ड परिभाषा दिखाएं जहां आप छवियां रखते हैं।
जोड़ा लेखक Artur, स्रोत

1 उत्तर

समस्या यह थी क्योंकि यूटीएफ -8 में एक ही चरित्र के कुछ प्रतिनिधित्व हैं, जिन्हें "गैर-सबसे छोटा" रूप कहा जाता है। उन पात्रों को गणितीय रूप से परिवर्तित किया जा सकता है, लेकिन iconv उन्हें ग़लत के रूप में गिना जाता है और परिवर्तित नहीं होता है।

I've made a short function, which converts text of any utf-8 character to Unicode (UTF-16) codepoints array. And then remap some non-ASCII values to ASCII by simple table (for example 0x20ac is the same as 0x80, etc). You can found complete code and remapping table here: Converting UTF-8 with non-shortest characters to one-byte encoding

0
जोड़ा