.net - ToLowerInvariant 错误时的实际示例
问题描述
为什么需要它:我的任务是处理 Windows 文件名,特别是使用它们作为键。当且仅当相应的文件可以在 Windows 文件系统中共存时,它们的密钥应该是唯一的。我可以将其转换为大写或小写。
该页面说ToUpperInvariant()
应该使用 代替ToLowerInvariant()
,因为:
一小部分字符在转换为小写时不能往返。
然后,此答案提供了可能存在此问题的“ϱ”、“ς”、“ß”的示例。
因此,风险将是其中之一:
- 有 2 个符号
a1
和a2
,它们会在文件系统中发生冲突。但ToLowerInvariant()
保持它们不变,因此不同。 - 有 2 个符号
A1
和A2
,它们会将 by 转换ToLowerInvariant()
为相同的小写符号。它们不会在文件系统上发生冲突。 - 还有什么我错过的吗?
然后假设ToUpperInvariant()
应该比 更好ToLowerInvariant()
,所以它会产生不同的结果,这是正确的。
我已经尝试了链接答案中的符号,实际上所有列出的符号都没有被 触及,To(Lower/Upper)Invariant()
甚至“ß”和“ẞ”都是独立的。我什至可以创建 2 个仅在这些符号上有所不同的文件,并且它们不会发生冲突。
所以,问题是ToLowerInvariant()
:当定义的等价错误(与 Windows 文件系统不匹配)时,哪些是实际示例?
解决方案
不是你的问题的真正答案,只是小吹毛求疵,太长了,无法发表评论。
一小部分字符在转换为小写时不能往返。
这在希腊文化中当然是有效的,但是当你使用不变的文化时它并不适用。在不变的文化中,字母“ϱ”、“ς”、“ß”根本不大写(参见下面的示例)。
[TestMethod]
public void GreekRho_ToUpper_ToLower_InvariantCulture()
{
var original = "ϱ";
var upper = original.ToUpperInvariant();
var lower = upper.ToLowerInvariant();
Assert.AreEqual(original, lower);
}
[TestMethod]
public void GreekRho_ToUpper_ToLower_GreekCulture()
{
var greek = CultureInfo.CreateSpecificCulture("el-GR");
var original = "ϱ";
var upper = original.ToUpper(greek);
var lower = upper.ToLower(greek);
Assert.AreNotEqual(original, lower);
}
推荐阅读
- php - 如果没有选择文件,如何绕过上传文件
- tensorflow - Yolo 没有开始训练
- python - 如何设置 Telegram Group 成员在加入群组之前先加入另一个频道的条件?
- amazon-web-services - 使用 S3 JavaScript SDK 在某些移动网络中 S3 上传失败
- macos - 在 FileMaker 中更改脚本语言(仅)?
- c - 如何将多个字符连接成一个字符串并将其存储在字符串变量中?
- graphql - 如何在我的 GraphQL 中为对象中的对象列表定义类型
- python - 在 for 循环中对来自不同字典的值求和
- flutter - 如何在这张照片中创建范围 datePicker
- caching - Prestashop 1.6 中的 LItespeed ESI 打孔