gpt4 book ai didi

c# - 生成随机字符串

转载 作者:太空狗 更新时间:2023-10-29 22:27:30 24 4
gpt4 key购买 nike

我试图在 .NET 中生成一个随机字符串并转换为字节,但遇到了一点困难。我想要完整的可能字符集,我的理解是字符串可以包含任何字符。

目前我的代码如下:

var plainText = new StringBuilder();
for (int j = 0; j < stringLength; ++j)
{
plainText.Append((char)_random.Next(char.MinValue, char.MaxValue));
}
byte[] x = Encoding.Unicode.GetBytes(plainText.ToString());
string result = Encoding.Unicode.GetString(x);

理论上,plainTextresult 应该是一样的。它们大部分相同,但一些原始字符丢失了,似乎是 55000-57000 范围内的字符 - 它们被替换为字符 65533。

我假设问题出在我的编码上,但我认为 Unicode 会正确处理这个问题。我试过 UTF8 和 UTF32,但它们给了我同样的问题。

有什么想法吗?

最佳答案

问题是 0xD800-0xDFFF (55296-57343) 范围内的字符称为 Unicode 代理字符,它们本身是无效的。它们必须成对出现(首先是 0xD800-0xDBFF,其次是 0xDC00-0xDFFF)才能有效(在 UTF-16 编码方案中)。单独来看,它们将被视为无效字符并解码为 0xFFFD (65533)。 C# 使用 UTF-16 来表示其字符串,所以这就是您看到该输出的原因。

您可以选择过滤掉它们(例如,调用 _random.Next 直到您获得非代理字符),或者在您生成代理字符时生成合法的代理对。

关于c# - 生成随机字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12127843/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com