NSAttributedString из символов UTF16 в UITextView - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть следующий код, чтобы сделать гиперссылку для строки в пределах UITextView

extension UITextView {
  func setAttributed(text: String) {
    self.attributedText = text.htmlAttributedString()
  }
}

extension String {
  func htmlAttributedString(document: NSAttributedString.DocumentType = .html) -> NSAttributedString? {
    guard let data = self.data(using: .utf16, allowLossyConversion: false), let font = font else { return nil }
    do {
      return try NSMutableAttributedString(data: data, options: [.documentType: document, .characterEncoding: String.Encoding.utf16.rawValue], documentAttributes: nil)
    } catch {
      debugger("error in string conversion. \(error.localizedDescription)")
      return nil
    }
}

И это как: self.messageTextView.setAttributed(text: "<a href=\"\(utf16_str1)\">\(utf16_str2)</a>")

Работает нормально, когда text содержит только простые utf8 символов и возвращает следующий результат:

text {
    NSColor = "kCGColorSpaceModelRGB 0 0 0.933333 1 ";
    NSFont = "<UICTFont: 0x1056bd910> font-family: \"Times New Roman\"; font-weight: normal; font-style: normal; font-size: 12.00pt";
    NSKern = 0;
    NSLink = "https://google.com";
    NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 15/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n), DefaultTabInterval 36, Blocks (\n), Lists (\n), BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0 LineBreakStrategy 0";
    NSStrokeColor = "kCGColorSpaceModelRGB 0 0 0.933333 1 ";
    NSStrokeWidth = 0;
    NSUnderline = 1;
}

Однако, когда text содержит utf16 символов, таких как ä или ö , результат разбит, как показано ниже:

<a href="https://google.com">textäö</a>{
    NSFont = "<UICTFont: 0x109f0eb30> font-family: \".SFUI-Regular\"; font-weight: normal; font-style: normal; font-size: 12.00pt";
}

Как я могу решить эту проблему, чтобы строки с символами типа ä don не нарушать результат

...