String class and UTF8
Monkey Targets Forums/iOS/String class and UTF8
| ||
| When I load an UTF-8 encoded text file, the iOS target doesn't deal with 2-byte characters properly. Printing the string to console or trying to perform any string manipulation (case conversion, substring etc.) results in something else displayed instead of these characters. I don't know if the problem lies in String<->NSString conversion or the Monkey string class itself, but with my limited knowledge of C++ and Objective-C I cannot figure it out. Does anybody have a solution? I'm still using ver.66, sorry :( |
| ||
| Ok, here is a partial solution to my problem, in case anybody is interested. Problem 1 (printing to console) Already solved by Mark. I copied Print implementation from ver.71c lang.cpp and console output is now what it's supposed to be. Problem 2 (uppercase/lowercase conversion) If you try something like Print "русский".ToUpper() it will print русский Here is my ugly patch for lang.cpp String implementation (inefficient, but the best I could come up with)
String ToUpper()const{
#if __OBJC__
NSString *nss = this->ToNSString();
NSString *uc = [nss uppercaseString];
return String(uc);
#else
for( int i=0;i<rep->length;++i ){
Char t=toupper( rep->data[i] );
if( t==rep->data[i] ) continue;
Rep *p=Rep::alloc( rep->length );
Char *q=p->data;
t_memcpy( q,rep->data,i );
for( q[i++]=t;i<rep->length;++i ){
q[i]=toupper( rep->data[i] );
}
return String( p );
}
return *this;
#endif
}
This actually produces РУССКИЙ in the example above. |