|
13
|
| Michael La Voie Frederik Gheysels · 技术社区 · 16 年前 |
|
|
1
18
这里有两种可能的解决方案-一种是从左到右处理输入的LINQ单行程序,另一种是传统的
如果速度很重要,可以考虑将每个字符的字节长度累加到最大长度,而不是在每次迭代中计算整个字符串的字节长度。但我不确定这是否有效,因为我对UTF-8编码了解不够。我可以从理论上想象,字符串的字节长度并不等于所有字符的字节长度之和。
|
|
|
2
18
我认为我们可以做得比天真地计算每一个加法的字符串总长度更好。LINQ很酷,但它会意外地鼓励低效的代码。如果我想要一个巨大的UTF字符串的前80000字节呢?那是个好主意 不必要的计数。“我有1个字节。现在我有2个。现在我有13个…现在我有52384个…”
那太傻了。大多数时候,至少在英格兰,我们可以
确切地
在那上面
所以我将从@Oren的建议开始,这是一个UTF8字符值的前导位。让我们从最右边开始
三种可能性
如果我有
也就是说,虽然我想在第n个字节之后切断字符串,但是如果n+第一字节出现在多字节字符的中间,则切割将产生无效的UTF8值。我需要备份,直到我找到一个从
代码
今天 那个 C# 6.0 might actually support binary representations
这个
我最初是作为字符串扩展编写的。再加上
下面是一个很好的测试用例,它在下面创建了输出,编写时希望是
输出如下。请注意,中的“智能引号”
本书的前五个字
这很有意思,我就在问题的五周年纪念日之前。虽然奥伦对比特的描述有一个小错误,但这是错误的 |
|
|
3
6
较短版本的 ruffin's answer the design of UTF8 :
|
|
|
4
5
其他答案都不能解释扩展的grapheme集群,例如
在里面 此后,您可以这样写:
(这段代码在早期版本的.NET上运行,但由于一个bug,它无法在.NET 5之前生成正确的结果)。 |
|
|
5
4
字节 有一个零值高阶位,它是字符的开头。如果其高阶位为1,则它位于字符的“中间”。检测字符开头的能力是UTF-8的明确设计目标。 请查看文档的“说明”部分 wikipedia article 更多细节。 |
|
|
6
1
是否有理由需要以字节为单位声明数据库列?这是默认值,但如果数据库字符集是可变宽度的,则这不是一个特别有用的默认值。我非常喜欢用字符来声明列。
假设默认情况下希望创建的所有表都使用字符长度语义,则可以设置初始化参数
|
|
|
7
1
下列的
Oren Trutner's comment
以及更高效(且可维护)的解决方案: 根据所需长度从字节数组中获取字符串,并剪切最后一个字符,因为它可能已损坏
|
|
|
8
1
这是另一个基于二进制搜索的解决方案:
|
|
|
9
-1
|
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |