I've found a serious Bug in JSONEncoder SR-6131 <https://bugs.swift.org/browse/SR-6631> and would like to fix it.
This bug cause JSON encoding issues on Double when using a local that does not use dot as decimal separator e.g « fr_FR » (we use a coma)
Demonstration of the issue :
import Foundation
// Required to call setLocale
import Darwin
// Let's set to french
setlocale(LC_ALL,"fr_FR")
struct Shot:Codable{
let seconds:Double
}
let shot = Shot(seconds: 1.1)
do{
let data = try JSONEncoder().encode(shot)
if let json = String(data:data, encoding:.utf8){
// the result is : "{"seconds":1,1000000000000001} »
// should be : "{"seconds":1.1000000000000001} »
// The decimal separator should not be "," but "."
print(json)
}
}catch{
print("\(error)")
}
exit(EX_OK)
I would like to propose my fix, test it and, but i’m not mastering the contribution mechanism.
✄ --------------------------------
This e-mail is confidential. Distribution, copy, publication or use of this information for any purpose is prohibited without agreement of the sender.
Ce message est confidentiel. Toute distribution, copie, publication ou usage des informations contenues dans ce message sont interdits sans agrément préalable de l’expéditeur.
On 18 Dec 2017, at 11:34, Benoit Pereira da silva via swift-users <swift-users@swift.org> wrote:
Dear all
I've found a serious Bug in JSONEncoder SR-6131 <https://bugs.swift.org/browse/SR-6631> and would like to fix it.
This bug cause JSON encoding issues on Double when using a local that does not use dot as decimal separator e.g « fr_FR » (we use a coma)
Demonstration of the issue :
import Foundation
// Required to call setLocale
import Darwin
// Let's set to french
setlocale(LC_ALL,"fr_FR")
struct Shot:Codable{
let seconds:Double
}
let shot = Shot(seconds: 1.1)
do{
let data = try JSONEncoder().encode(shot)
if let json = String(data:data, encoding:.utf8){
// the result is : "{"seconds":1,1000000000000001} »
// should be : "{"seconds":1.1000000000000001} »
// The decimal separator should not be "," but "."
print(json)
}
}catch{
print("\(error)")
}
exit(EX_OK)
I would like to propose my fix, test it and, but i’m not mastering the contribution mechanism.
✄ --------------------------------
This e-mail is confidential. Distribution, copy, publication or use of this information for any purpose is prohibited without agreement of the sender.
Ce message est confidentiel. Toute distribution, copie, publication ou usage des informations contenues dans ce message sont interdits sans agrément préalable de l’expéditeur.