aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2013-07-17 19:27:52 -0700
committerGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2013-07-17 19:29:38 -0700
commit9fec655e9890f340ef3a84fddcc76c57cebd4a34 (patch)
treeda4cf524465a37e469db533334ea2c781775d199 /src/core
parentc2f75bfae0ae58be952c2abc07d90ead01e1ed89 (diff)
Fixed #202: Fixed decoding of modified UTF7
Diffstat (limited to 'src/core')
-rw-r--r--src/core/basetypes/MCString.cc12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/core/basetypes/MCString.cc b/src/core/basetypes/MCString.cc
index 6a0c1cbb..badf1425 100644
--- a/src/core/basetypes/MCString.cc
+++ b/src/core/basetypes/MCString.cc
@@ -1127,8 +1127,15 @@ String * String::uppercaseString()
void String::appendBytes(const char * bytes, unsigned int length, const char * charset)
{
#if __APPLE__
- CFStringRef encodingName = CFStringCreateWithCString(NULL, charset, kCFStringEncodingUTF8);
- CFStringEncoding encoding = CFStringConvertIANACharSetNameToEncoding(encodingName);
+ CFStringEncoding encoding;
+ if (strcasecmp(charset, "mutf-7") == 0) {
+ encoding = kCFStringEncodingUTF7_IMAP;
+ }
+ else {
+ CFStringRef encodingName = CFStringCreateWithCString(NULL, charset, kCFStringEncodingUTF8);
+ encoding = CFStringConvertIANACharSetNameToEncoding(encodingName);
+ CFRelease(encodingName);
+ }
CFStringRef cfStr = CFStringCreateWithBytes(NULL, (const UInt8 *) bytes, (CFIndex) length, encoding, false);
if (cfStr != NULL) {
CFDataRef data = CFStringCreateExternalRepresentation(NULL, cfStr, kCFStringEncodingUTF16LE, '_');
@@ -1138,7 +1145,6 @@ void String::appendBytes(const char * bytes, unsigned int length, const char * c
}
CFRelease(cfStr);
}
- CFRelease(encodingName);
#else
UErrorCode err;