दिलचस्प पोस्ट
पायथन ध्वनि ("बेल") Mysql में utf8mb4 और utf8 वर्णसेट्स में क्या अंतर है? CalledFromWrongThreadException: केवल मूल थ्रेड जो दृश्य पदानुक्रम बनाते हैं, उन दृश्यों को स्पर्श कर सकते हैं आरएसए के माध्यम से अनोखा सार्वजनिक और निजी कुंजी जनरेट करने के लिए कैसे करें पृष्ठभूमि में आईओएस एप्लिकेशन क्रियान्वित कार्य वेब। एक्सएमएल फ़ाइल क्या है और इसके साथ मैं क्या कर सकता हूं? पॉइंटर्स को समझने की बाधाएं क्या हैं और उनको दूर करने के लिए क्या किया जा सकता है? <form method = "link"> या <a>? क्या फर्क पड़ता है? NetBeans में निष्पादन योग्य जार का निर्माण मोबाइल सफारी (आईफ़ोन) पर फ़ॉन्ट आकार का मुद्दा तय करें जहां टेक्स्ट असंगत रूप से प्रदान किया गया है और कुछ फोंट दूसरों की तुलना में बड़ा है? स्क्रॉलबॉक्स पर धीमा स्क्रॉल प्रभाव कैसे बनाएं? आर में एक समारोह में दो '…' कथन का उपयोग करने का कोई तरीका क्या है? संस्करण स्ट्रिंग क्रम के आरसी-एक्सवायडडब्ल्यूड द्वारा जीआईटी टैग को सॉर्ट करने के लिए कैसे? कॉल removeView () पहले बच्चे के माता-पिता पर जावा regex \ s के साथ काम नहीं करता, कहते हैं: अमान्य से बच अनुक्रम

यूनिसेक यूनिकोड वर्णों के लिए उद्देश्य सी / कोको का उपयोग करना, अर्थात् \ u1234

UTF-8 अक्षर से कुछ साइटें जो मैं से डेटा प्राप्त कर रहा हूँ वापस लौट रही हैं, यूटीएफ -8 अक्षर बच गए हैं, अर्थात्: \u5404\u500b\u90fd

क्या इसमें कोको फ़ंक्शन बनाया गया है जो इसके साथ सहायता कर सकता है या मुझे अपने स्वयं के डीकोडिंग एल्गोरिदम लिखना होगा।

Solutions Collecting From Web of "यूनिसेक यूनिकोड वर्णों के लिए उद्देश्य सी / कोको का उपयोग करना, अर्थात् \ u1234"

सी अनसेकिंग करने के लिए कोई अंतर्निहित फ़ंक्शन नहीं है।

" NSPropertyListSerialization " के साथ आप "पुराने पाठ शैली" plist के माध्यम से थोड़ी सी धोखा सकते हैं \Uxxxx माध्यम से सी बचने का समर्थन करता है:

 NSString* input = @"ab\"cA\"BC\\u2345\\u0123"; // will cause trouble if you have "abc\\\\uvw" NSString* esc1 = [input stringByReplacingOccurrencesOfString:@"\\u" withString:@"\\U"]; NSString* esc2 = [esc1 stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""]; NSString* quoted = [[@"\"" stringByAppendingString:esc2] stringByAppendingString:@"\""]; NSData* data = [quoted dataUsingEncoding:NSUTF8StringEncoding]; NSString* unesc = [NSPropertyListSerialization propertyListFromData:data mutabilityOption:NSPropertyListImmutable format:NULL errorDescription:NULL]; assert([unesc isKindOfClass:[NSString class]]); NSLog(@"Output = %@", unesc); 

लेकिन मन यह बहुत कुशल नहीं है यदि आप अपना खुद का पार्सर लिखते हैं तो यह बहुत बेहतर है (BTW आप JSON तार decoding हैं? यदि हाँ, तो आप मौजूदा JSON पार्सर का उपयोग कर सकते हैं।)

यह सही है कि कोको एक समाधान प्रदान नहीं करता है , फिर भी कोर फाउंडेशन करता है: CFStringTransform

CFStringTransform मैक ओएस (और आईओएस) के एक धूल, दूरदराज के कोने में रहता है और इसलिए यह थोड़ा मणि पता है यह एप्पल के आईसीयू संगत स्ट्रिंग ट्रांसफ़ॉर्मेशन इंजन का फ्रंट एंड है। यह यूनानी और लैटिन (या किसी भी ज्ञात लिपियों के बारे में) के बीच लिप्यंतरण की तरह असली जादू कर सकता है, लेकिन यह एक भद्दा सर्वर से अनजाने स्ट्रिंग जैसे सांसारिक कार्य करने के लिए भी इस्तेमाल किया जा सकता है:

 NSString *input = @"\\u5404\\u500b\\u90fd"; NSString *convertedString = [input mutableCopy]; CFStringRef transform = CFSTR("Any-Hex/Java"); CFStringTransform((__bridge CFMutableStringRef)convertedString, NULL, transform, YES); NSLog(@"convertedString: %@", convertedString); // prints: 各個都, tada! 

जैसा कि मैंने कहा, CFStringTransform वास्तव में शक्तिशाली है यह कई पूर्वनिर्धारित रूपांतरणों का समर्थन करता है, जैसे कि केस मैपिंग, सामान्यीकरण या यूनिकोड वर्ण नाम रूपांतरण। आप अपने खुद के परिवर्तनों को भी डिजाइन कर सकते हैं।

मुझे पता नहीं है कि ऐप्पल ने कोको से इसे उपलब्ध नहीं कराया है।

2015 को संपादित करें:

ओएस एक्स 10.11 और आईओएस 9 फाउंडेशन के लिए निम्नलिखित विधि जोड़ें:

 - (nullable NSString *)stringByApplyingTransform:(NSString *)transform reverse:(BOOL)reverse; 

तो ऊपर से उदाहरण बन जाता है …

 NSString *input = @"\\u5404\\u500b\\u90fd"; NSString *convertedString = [input stringByApplyingTransform:@"Any-Hex/Java" reverse:YES]; NSLog(@"convertedString: %@", convertedString); 

सिर के लिए धन्यवाद @ एनसीएसएमआईटीटी

मैं जो लिखा था, वह यहाँ है। उम्मीद है कि यह कुछ लोगों को साथ में मदद करेगा।

 + (NSString*) unescapeUnicodeString:(NSString*)string { // unescape quotes and backwards slash NSString* unescapedString = [string stringByReplacingOccurrencesOfString:@"\\\"" withString:@"\""]; unescapedString = [unescapedString stringByReplacingOccurrencesOfString:@"\\\\" withString:@"\\"]; // tokenize based on unicode escape char NSMutableString* tokenizedString = [NSMutableString string]; NSScanner* scanner = [NSScanner scannerWithString:unescapedString]; while ([scanner isAtEnd] == NO) { // read up to the first unicode marker // if a string has been scanned, it's a token // and should be appended to the tokenized string NSString* token = @""; [scanner scanUpToString:@"\\u" intoString:&token]; if (token != nil && token.length > 0) { [tokenizedString appendString:token]; continue; } // skip two characters to get past the marker // check if the range of unicode characters is // beyond the end of the string (could be malformed) // and if it is, move the scanner to the end // and skip this token NSUInteger location = [scanner scanLocation]; NSInteger extra = scanner.string.length - location - 4 - 2; if (extra < 0) { NSRange range = {location, -extra}; [tokenizedString appendString:[scanner.string substringWithRange:range]]; [scanner setScanLocation:location - extra]; continue; } // move the location pas the unicode marker // then read in the next 4 characters location += 2; NSRange range = {location, 4}; token = [scanner.string substringWithRange:range]; unichar codeValue = (unichar) strtol([token UTF8String], NULL, 16); [tokenizedString appendString:[NSString stringWithFormat:@"%C", codeValue]]; // move the scanner past the 4 characters // then keep scanning location += 4; [scanner setScanLocation:location]; } // done return tokenizedString; } + (NSString*) escapeUnicodeString:(NSString*)string { // lastly escaped quotes and back slash // note that the backslash has to be escaped before the quote // otherwise it will end up with an extra backslash NSString* escapedString = [string stringByReplacingOccurrencesOfString:@"\\" withString:@"\\\\"]; escapedString = [escapedString stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""]; // convert to encoded unicode // do this by getting the data for the string // in UTF16 little endian (for network byte order) NSData* data = [escapedString dataUsingEncoding:NSUTF16LittleEndianStringEncoding allowLossyConversion:YES]; size_t bytesRead = 0; const char* bytes = data.bytes; NSMutableString* encodedString = [NSMutableString string]; // loop through the byte array // read two bytes at a time, if the bytes // are above a certain value they are unicode // otherwise the bytes are ASCII characters // the %C format will write the character value of bytes while (bytesRead < data.length) { uint16_t code = *((uint16_t*) &bytes[bytesRead]); if (code > 0x007E) { [encodedString appendFormat:@"\\u%04X", code]; } else { [encodedString appendFormat:@"%C", code]; } bytesRead += sizeof(uint16_t); } // done return encodedString; } 

सरल कोड:

 const char *cString = [unicodeStr cStringUsingEncoding:NSUTF8StringEncoding]; NSString *resultStr = [NSString stringWithCString:cString encoding:NSNonLossyASCIIStringEncoding]; 

से: https://stackoverflow.com/a/7861345