德语字符无法正确显示

4
我遇到了一个显示字符的问题:
例如:我的单词是:Üniversäl,但当我打印这个单词时,它显示为:√únivers√§l
我该如何解决这个问题?
如下图所示,在提示中它显示正确的单词: It display proper word in hint 但是当我打印字符串str1时,它打印出的是√únivers√§l

1
你是在哪里以及如何显示它? - Sandro Meier
4
“Üniversäl”不是德语词汇 :-) - Martin R
1
请提供英文原文,我将为您翻译成中文。 - Amar
1
好的,但我的问题是德语字符无法正确显示。 - Nishant Tyagi
@MartinR,你有解决这个问题的任何想法吗? - Nishant Tyagi
显示剩余11条评论
3个回答

2

金属umlauts有问题吗?

这取决于您使用的输出通道的编码。

例如:

    NSString *universal = @"Üniversäl";

    NSLog(@"Üniversal: %@", universal);

    printf("%s\n", [universal cStringUsingEncoding:NSMacOSRomanStringEncoding]);
    printf("%s\n", [universal cStringUsingEncoding:NSISOLatin1StringEncoding]);
    printf("%s\n", [universal cStringUsingEncoding:NSUTF8StringEncoding]);

“prints”这个字符串使用三种不同的编码在终端上输出。其中有一种看起来对你来说是正确的吗?

谢谢,老兄。[universal cStringUsingEncoding:NSMacOSRomanStringEncoding] 对我有用。 - Nishant Tyagi

1

我建议您尝试将编码更改为更加类似UTF8的格式。

NSString *otherString = [[NSString alloc] initWithCString:"Üniversäl" encoding:NSMacOSRomanStringEncoding];
NSLog(@"%@",otherString); // outputs Üniversäl

NSString *string = [[NSString alloc] initWithCString:"Üniversäl" encoding:NSUTF8StringEncoding];
NSLog(@"%@",string);  // outputs Üniversäl

1
@0x7fffffff 我认为这不可行(可靠)。我可能错了,但我认为在Xcode中Objective-C源文件的默认编码是UTF-8。此外,编译器不需要“理解”C字符串字面量中的“ü”。初始化Objective-C字符串字面量的可靠方法是使用C++或Objective-C字符串字面量,例如@"Ü"。 - CouchDeveloper
要检查Xcode的控制台是否存在问题(在Xcode 4.0至4.3中有一些问题),只需在终端中运行程序。NSLog应该会输出到错误控制台。(作为测试的简单控制台程序) - CouchDeveloper
1
@NishantTyagi:那请展示一下你是如何将字符串赋值给标签的代码。 - Martin R
我正在从数组中获取单词,并将其分配给单元格标签,如下所示:cell.textLabel.text = [[sectionedgroupArr objectAtIndexPath:indexPath] valueForKey:@"groupname"]; - Nishant Tyagi
1
@NishantTyagi:那么问题出在哪里呢?标签中显示的文本有问题,还是NSLog输出有问题,还是两者都有问题? - Martin R
显示剩余6条评论

0

这不是答案,但我想在我的评论中添加一个截图。

我将UILabel拖放到我的故事板中,并将其附加到label1。在我看来一切都很好。我正在使用带有iOS 6的Xcode 4.6。如果我漏掉了什么,请告诉我?

@interface v1ViewController : UIViewController

@property (nonatomic, retain) IBOutlet UILabel *label1;

@end

@implementation v1ViewController
@synthesize label1;

- (void)viewDidLoad
{
    [super viewDidLoad];


    NSArray *tempArray = [[NSArray alloc] initWithObjects:@"Üniversäl", nil];

   NSString *str2 = [tempArray objectAtIndex:0];
   //NSLog(@"str2: %s",[str2 UTF8String]);  // outputs Üniversäl
   NSLog(@"str2: %@",str2);  // outputs Üniversäl
   label1.text = str2;

}

enter image description here


这是不同的事情,因为您直接传递需要记录的字符串。如果我以这种方式传递,我也会得到正确的单词。 - Nishant Tyagi
@NishantTyagi 看看我的修改后的答案。我仍然得到相同的结果。我猜唯一的区别是你是如何存储和检索你的sectiongrouparry? - Sam B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接