如何在c#控制台程序(.net核心)中计算字符串的显示宽度?
var str = "hello你好こんにちは";
var length = str.Length; // 12
var width = Str.Width(str); // expected width: 19
public static int Width(string str)
{
var length = 0;
for(var i = 0; i < str.Length; i++)
{
byte[] bytes = Encoding.Default.GetBytes(str.Substring(i,1));
if(bytes.Length > 1)
{
length += 2;
}
else
{
length += 1;
}
}
return length;
}
我不能保证这会在所有语言中获得正确的结果。
那么我应该怎么做才能使该功能在所有语言中都能正常工作?就像PHP中的mb_strwidth
函数一样。