2015-12-07 55 views
0

我有一句俄語「 Купитьквартиру「。我需要將其轉換爲如何轉換UTF→CP1251,最後轉換爲URL編碼%CA%F3%EF%E8%F2%FC +%EA%E2%E0%F0%F2%E8%F0%F3

%CA%F3%EF%E8%F2%FC+%EA%E2%E0%F0%F2%E8%F0%F3 

編碼看起來像ANSI

通知,如果我Uri.EscapeDataString(Купитьквартиру,我得到

%D0%9A%D1%83%D0%BF%D0%B8%D1%82%D1%8C%20%D0%BA%D0%B2%D0%B0%D1%80%D1%82%D0%B8%D1%80%D1%83 

但是這些字符串不相等。

有沒有一些正確的方法來轉換?

+0

哪裏是哪裏來的數據?您確定它不在CP1251中嗎? – RedX

+1

由於您正在尋找非標準方式來表示Uri中的非ASCII文本,因此您必須自行完成......將字符串轉換爲您選擇的編碼中的字節,並將其轉換爲Url的%-encode。考慮添加語言標籤,以便可以建議使用該語言的可能實現。 –

+0

@RedX,我的數據來自哪裏並不重要。有兩點 - **給定的字符串**和**必需的字符串**。所以我正在尋找轉換方式。 –

回答

1

Uri.EscapeDataString遵循URL規範RFC 3986,它表示使用UTF-8字符編碼。

你需要編寫自定義中號你自己的功能,如:

let 
    To1251URL = (input as text) as text => let 
     ToBytes = Binary.ToList(Text.ToBinary(input, 1251)), 
     ToText = Text.Combine(List.Transform(ToBytes, (b) => "%" & Number.ToText(b, "X"))), 
     FixSpace = Text.Replace(ToText, "%20", "+") 
    in 
     FixSpace, 
    Applied = To1251URL("Купить квартиру") 
in 
    Applied 
相關問題