[英]Extra space is added at the bottom of text in uitextview when string is pasted into it
[英]Extra slash ( \ ) getting added when string (with unicode character) added to a dictionary
我面臨以下問題:
在我的應用程序中,用戶也可以在文本字段中輸入特殊字符(如表情符號)。 因此,在將輸入的文本發送到請求正文中的服務器時,我正在使用以下代碼對其進行轉換:
func emojiToUTF8()->String
{
let data = self.data(using: .nonLossyASCII, allowLossyConversion: true)
let emoji = String.init(data: data!, encoding: .utf8)
return emoji ?? self
}
例如,如果我輸入文本"☺️"
,它會使用上述方法轉換為"\☺\️"
。 到這里一切都很好。
當我將此添加到字典以將其作為請求參數發送到服務器時,就會出現問題。 我正在使用的代碼:
var parameters = [String:String]()
parameters["feedback"] = feedBackTxt
print("Parameters:",parameters) /// output: ["feedback": "\\u263a\\ufe0f"]
所以,這里的問題是由於字符轉義,在每個斜線之前附加了一個額外的斜線。 我也檢查了創建的字典值。 它也在那里顯示雙斜線。 我如何避免這種情況? 為什么當我只是用字符串創建字典時會發生這種情況? 這導致服務器端出現問題。
我已經嘗試了幾件事,但似乎都沒有奏效。
你的問題是你是雙重編碼。
您正在獲取一個字符串,將其轉換為 ASCII,然后將其重新解析為 UTF8,然后將其(可能)編碼為 JSON,即 UTF8。 在此過程中,您的第二個編碼器會轉義反斜杠。
對此的最佳解決方案是重新設計您的服務器以接受 UTF8。 但是,如果您不能這樣做,則需要確保僅使用 ASCII 對該字符串進行一次編碼。
簡而言之,您應該擺脫emojiToUTF8
並確保您的parameters
處理器按照您的服務器要求的方式進行編碼(顯然是 ASCII 而不是 UTF8)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.