簡體   English   中英

將字符串(帶有 unicode 字符)添加到字典時添加額外的斜杠 ( \\ )

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM