'How to specify Japanese encoding for a UILabel?

When I attempt to display a Japanese string in a UILabel on iOS, it gets displayed using Chinese encoding instead of Japanese.

The two encodings are nearly identical, except in a few specific cases. For example, here is how the character 直 (Unicode U+76F4) is rendered in Chinese (top) vs. Japanese (bottom):

Chinese vs Japanese

(see here for more examples)

The only time Japanese strings render correctly is when the user's system locale is ja-jp (Japan), but I'd like it to render as Japanese for all users.

Is there any way to force the Japanese encoding? Android has TextView.TextLocale, but I don't see anything similar on iOS UILabel

(Same question for Android. I tagged this Swift/Objective-C because, although I'm looking for a Xamarin.iOS solution, the API is almost the same)



Solution 1:[1]

You just need to specify language identifier for attributed string, like

let label = UILabel()
let text = NSAttributedString(string: "?", attributes: [
    .languageIdentifier: "ja",                            // << this !! 
    .font: UIFont.systemFont(ofSize: 64)
])
label.attributedText = text

demo

Tested with Xcode 13.2 / iOS 15.2

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Asperi