Skip to content

[SR-3052] [Foundation] Incorrect result of string methods while working with non latin symbols #4309

@swift-ci

Description

@swift-ci
Previous ID SR-3052
Radar None
Original Reporter naithar (JIRA User)
Type Bug
Status Resolved
Resolution Done
Environment

OS: Ubuntu 14.04.
Swift 10.25 snapshot

Additional Detail from JIRA
Votes 1
Component/s Foundation
Labels Bug, Linux
Assignee naithar (JIRA)
Priority Medium

md5: 06a43e5ed7d9e1fe8beff900625f8600

is duplicated by:

  • SR-1204 Truncated result of stringByAddingPercentEncodingWithAllowedCharacters

Issue Description:

Foundation methods .removingPercentEncoding and .addingPercentEncoding on Linux(Ubuntu) do not work the same as they do on MacOS, when using non latin unicode symbols.

Example code for .removingPercentEncoding:

import Foundation

let cyrillicString = "\u{0434}\u{043E}\u{043C}"
//returns "дом"
let cyrillicEscapedString = cyrillicString.removingPercentEncoding
//returns "д\u{ef}" on Linux. On MacOS returns "дом" i.e. same string which is expected

let chineseString = "\u{623F}\u{5B50}"
//returns "房子"
let chineseEscapedString = chineseString.removingPercentEncoding
//returns "\u{ef}" on Linux. For MacOS result is same as chineseString

let arabicString = "\u{0645}\u{0646}\u{0632}\u{0644}"
//returns "منزل"
let arabicEscapedString = arabicString.removingPercentEncoding
//return "من" on Linux

let randomString = "\u{00E0}\u{00E6}"
//returns "àæ"
let randomEscapedString = randomString.removingPercentEncoding
//returns "à" on Linux

let latinString = "home"
//returns "home"
let latinEscapedString = latinString.removingPercentEncoding
//returns "home"

Example code for . addingPercentEncoding:

import Foundation

let string = "\u{0434}\u{043E}\u{043C}"//returns "дом"
let escaped = string.addingPercentEncoding(withAllowedCharacters: .alphanumerics)
//returns "%D0%B4%D0", while it should return "%D0%B4%D0%BE%D0%BC"

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions