Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字符串包含非字母数字字符(如中文或日文)时的对齐问题_C#_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

C# 字符串包含非字母数字字符(如中文或日文)时的对齐问题

C# 字符串包含非字母数字字符(如中文或日文)时的对齐问题,c#,sql,sql-server,sql-server-2008,C#,Sql,Sql Server,Sql Server 2008,我正在编写一个用C#编写的小程序,它将从数据库中查询结果并以文本文件格式显示 当结果包含非字母数字字符时,我有一个问题。请看下面的样品 Johnny $1000 Adam $1000 测测 $1000 您可以完美地看到Johnny和Adam行,但看不到测测字符。我见过这条线 实际上可以使用Tab而不是Space来排列,但是我如何计算所需的制表符,因为字母表和中文/日语的宽度不同。我必须在SQL内部执行,这意味着我不能使用像MeasureString这样的东西

我正在编写一个用C#编写的小程序,它将从数据库中查询结果并以文本文件格式显示

当结果包含非字母数字字符时,我有一个问题。请看下面的样品

Johnny    $1000
Adam      $1000
测测        $1000  
您可以完美地看到
Johnny
Adam
行,但看不到
测测字符。我见过这条线

实际上可以使用
Tab
而不是
Space
来排列,但是我如何计算所需的制表符,因为字母表和中文/日语的宽度不同。我必须在SQL内部执行,这意味着我不能使用像
MeasureString
这样的东西


任何帮助都将不胜感激。

@warheat1990:恐怕@Jeroen的评论是对的。

如果你打算使用SQL,你可以尝试选择一种可预测的字体(比如汉字是英文的两倍宽),然后直接计算宽度。
因此,任何中文/日文字符都会占用英文字符两倍的空间。

在SQL中,这不会是一个问题,因为您将选择这些值作为列。在SQLServer2008中格式化字符串是一项实践,这就是为什么要将表示问题留给客户机的原因。由于您的客户机是C#,它当然可以做到这一点,所以您“必须”在SQL内部执行此操作的原因是什么?因为我不允许在C#级别执行此操作,它必须来自SQL。我在想,有没有办法在SQL中检查字符串中有多少个中文/日文字符?我可能会数一数字符串中非字母表的总数,然后从中应用制表符。在表示层之外,没有任何可靠的方法可以做到这一点。排列
测测取决于字符的光学宽度,而光学宽度又取决于用于渲染字符的字体。你不能仅仅从角色来判断它是否是“宽”的并且需要额外的角色。“非字母表”也不是很有用,因为SQL没有Unicode类别的函数。你不能得到比“αβ”更多的字母,在大多数字体中,它的宽度与“ab”一样大,但是
α
β
不在字母数字集
a-z0-9
中。