RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1198119
Accepted
Potion
Potion
Asked:2021-10-31 20:20:55 +0000 UTC2021-10-31 20:20:55 +0000 UTC 2021-10-31 20:20:55 +0000 UTC

用字符 \u0431 C# 解码字符串

  • 772

有一条线像

string s ="\u0431\u044b\u0442\u044c 12 \u0446\u0438\u0444\u0440."

如果我将它插入到一些在线服务中,那么它被成功解码为

быть 12 цифр.

在线服务显示不同的编码,由他自动选择。比如那个原文是unicode,翻译后是UTF8

好的,我们用 C# 写同样的东西

            string substring ="\u0431\u044b\u0442\u044c 12 \u0446\u0438\u0444\u0440."
            Encoding utf8 = Encoding.UTF8;
            Encoding unicode = Encoding.Unicode;

            // Convert the string into a byte array.
            byte[] unicodeBytes = unicode.GetBytes(substring);

            // Perform the conversion from one encoding to the other.
            byte[] utf8Bytes = Encoding.Convert(unicode, utf8, unicodeBytes);

            // Convert the new byte[] into a char[] and then into a string.
            char[] utf8Chars = new char[utf8.GetCharCount(utf8Bytes, 0, utf8Bytes.Length)];
            utf8.GetChars(utf8Bytes, 0, utf8Bytes.Length, utf8Chars, 0);
            string utf8String = new string(utf8Chars);
            Console.WriteLine(utf8string);

在输出中我们得到完全相同的

\u0431\u044b\u0442\u044c 12 \u0446\u0438\u0444\u0440.

据我了解,我误解了编码的本质 - 编码对字节进行编码,字符串最初是用 C# 内部的东西编码的,可能是相同的 UTF8,所以它不会尝试重新编码字符 \u0431 和其余部分转换为西里尔文,但只是认为该字符串已经是 UTF8。

问题是如何将这些相同的转义序列提供给解码器,这意味着某种西里尔字符,以便最终它给我与在线服务相同的东西?

应评论员的要求,我推导出utf8chars,这是一个chars数组,所以我通过foreach推导出来

结论

\

你

0

四

四

和

一

2

正确答案后评论。

32 分钟前回答

@vp_arth

Regex.Unescape 有帮助。确实,结果很不方便——我想缩短问题,所以我提前写了这行。但实际上我是从网络请求中得到这个字符串的,当我输出它时,我得到了未解码的字符。如果您再次获取字符并将它们敲成一个字符串,则所有内容都会正确显示。显然,该行只是第一次执行 Regex.Unescape,因此它重新正确输出

c#
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    vp_arth
    2021-10-31T20:45:48Z2021-10-31T20:45:48Z

    在这样的字符串中已经有解码的字符:

    Console.WriteLine("\u0431\u044b\u0442\u044c 12 \u0446\u0438\u0444\u0440."); 
    // быть 12 цифр.
    

    这是带有斜杠的原始行,例如,可以手动替换它们:

    string s = @"\u0431\u044b\u0442\u044c 12 \u0446\u0438\u0444\u0440."; 
    Console.WriteLine(s);
    // \u0431\u044b\u0442\u044c 12 \u0446\u0438\u0444\u0440.
    
    Regex  rx = new Regex( @"\\u([0-9a-f]{4})");
    s = rx.Replace(s, match => ((char) Int32.Parse(match.Value.Substring(2), NumberStyles.HexNumber)).ToString() );
    Console.WriteLine(s);
    // быть 12 цифр.
    

    或者更简单:

    Console.WriteLine(Regex.Unescape(@"\u0431\u044b\u0442\u044c 12 \u0446\u0438\u0444\u0440."));
    // быть 12 цифр.
    
    • 2

相关问题

  • 使用嵌套类导出 xml 文件

  • 分层数据模板 [WPF]

  • 如何在 WPF 中为 ListView 手动创建列?

  • 在 2D 空间中,Collider 2D 挂在玩家身上,它对敌人的重量相同,我需要它这样当它们碰撞时,它们不会飞向不同的方向。统一

  • 如何在 c# 中使用 python 神经网络来创建语音合成?

  • 如何知道类中的方法是否属于接口?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5