如何将 UTF→CP1251 转换为 URL-encoded %CA%F3%EF%E8%F2%FC+%EA%E2%E0%F0%F2%E8%F0%F3

How to convert UTF→CP1251 and finally to URL-encoded %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

但是这些字符串不相等。

有没有正确的转换方式?

Uri.EscapeDataString 遵循 URL 规范 RFC 3986,它表示使用 UTF-8 字符编码。

您需要在自定义 M 中编写自己的函数,如下所示:

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