Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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#_.net_Unicode_Ravendb - Fatal编程技术网

C# 检查控制字符

C# 检查控制字符,c#,.net,unicode,ravendb,C#,.net,Unicode,Ravendb,我想检查字符串以确保它不包含任何控制字符。我已经想出了这个解决办法。您是否同意它足以达到预期目的?有什么明显的我遗漏的吗 string input = "2cancer'.pdf"; char[] chars = input.ToCharArray(); foreach (var c in chars) { if(c == 127 || (c < ' ' && c != '\t'))

我想检查字符串以确保它不包含任何控制字符。我已经想出了这个解决办法。您是否同意它足以达到预期目的?有什么明显的我遗漏的吗

        string input = "2cancer'.pdf";

        char[] chars = input.ToCharArray();

        foreach (var c in chars)
        {
            if(c == 127 || (c < ' ' && c != '\t'))
            {
                throw new Exception("Control character detected");
            }
        }     
string input=“2cancer'.pdf”;
char[]chars=input.ToCharArray();
foreach(以字符表示的变量c)
{
如果(c==127 | |(c<'&&c!='\t'))
{
抛出新异常(“检测到控制字符”);
}
}     
背景是将文件上载到RavenDB时出现问题,它抱怨文件名包含无效的控制字符,即',因此我希望检测到无效的控制字符,并将其删除或引发异常以提醒用户,尽管我可能会执行前者

异常的堆栈跟踪是:

    [ArgumentException: Specified value has invalid Control characters.
    Parameter name: value]
       System.Net.WebHeaderCollection.CheckBadChars(String name, Boolean isHeaderValue) +8426470
       System.Net.WebHeaderCollection.Set(String name, String value) +86
       Raven.Client.Connection.HttpJsonRequest.WriteMetadata(RavenJObject metadata) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\HttpJsonRequest.cs:573
       Raven.Client.Connection.HttpJsonRequest..ctor(CreateHttpJsonRequestParams requestParams, HttpJsonRequestFactory factory) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\HttpJsonRequest.cs:91
       Raven.Client.Connection.HttpJsonRequestFactory.CreateHttpJsonRequest(CreateHttpJsonRequestParams createHttpJsonRequestParams) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\HttpJsonRequestFactory.cs:57
       Raven.Client.Connection.ServerClient.DirectPutAttachment(String key, RavenJObject metadata, Nullable`1 etag, Stream data, String operationUrl) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\ServerClient.cs:490
       Raven.Client.Connection.<>c__DisplayClass19.<PutAttachment>b__18(String operationUrl) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\ServerClient.cs:441
       Raven.Client.Connection.<>c__DisplayClassa.<ExecuteWithReplication>b__9(String operationUrl) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\ServerClient.cs:167
       Raven.Client.Connection.ReplicationInformer.TryOperation(Func`2 operation, String operationUrl, Boolean avoidThrowing, T& result) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\ReplicationInformer.cs:564
       Raven.Client.Connection.ReplicationInformer.ExecuteWithReplication(String method, String primaryUrl, Int32 currentRequest, Int32 currentReadStripingBase, Func`2 operation) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\ReplicationInformer.cs:523
       Raven.Client.Connection.ServerClient.ExecuteWithReplication(String method, Func`2 operation) in c:\Builds\RavenDB-Stable\Raven.Client.Lightweight\Connection\ServerClient.cs:174
[ArgumentException:指定的值具有无效的控制字符。
参数名称:值]
System.Net.WebHeaderCollection.CheckBadChars(字符串名称,布尔值)+8426470
System.Net.WebHeaderCollection.Set(字符串名称、字符串值)+86
c:\Builds\RavenDB Stable\Raven.Client.Lightweight\Connection\HttpJsonRequest.WriteMetadata(RavenObject元数据)中的Raven.Client.Connection.HttpJsonRequest.WriteMetadata
c:\Builds\RavenDB Stable\Raven.Client.Lightweight\Connection\HttpJsonRequest.cs:91中的Raven.Client.Connection.HttpJsonRequest..ctor(创建httpjsonrequestparams requestParams,HttpJsonRequestFactory工厂)
c:\Builds\RavenDB Stable\Raven.Client.Lightweight\Connection\HttpJsonRequestFactory.CreateHttpJsonRequest(CreateHttpJsonRequestParams CreateHttpJsonRequestParams)中的Raven.Client.Connection.HttpJsonRequestFactory.createHttpJsonRequestFactory(CreateHttpJsonRequestParams CreateHttpJsonRequestParams):57
c:\Builds\RavenDB Stable\Raven.Client.Lightweight\Connection\ServerClient.DirectPutAttachment(字符串键,RavenObject元数据,null`1 etag,流数据,字符串操作URL)中的Raven.Client.Connection.ServerClient.DirectPutAttachment
Raven.Client.Connection.c__在c:\Builds\RavenDB Stable\Raven.Client.Lightweight\Connection\ServerClient.cs:441中显示Class19.b__18(字符串操作URL)
Raven.Client.Connection.c\uuu在c:\Builds\RavenDB Stable\Raven.Client.Lightweight\Connection\ServerClient.cs:167中显示ClassA.b\uuu 9(字符串操作URL)
c:\Builds\RavenDB Stable\Raven.Client.Lightweight\Connection\ReplicationInformer.tryooperation(Func`2操作、字符串操作URL、布尔值避免抛出、T&result)中的Raven.Client.Connection.ReplicationInformer.tryooperation(Func`2操作、字符串操作URL、布尔值避免抛出、T&result)
c:\Builds\RavenDB Stable\Raven.Client.Lightweight\Connection\ReplicationInformer.ExecuteWithReplication(字符串方法、字符串primaryUrl、Int32 currentRequest、Int32 currentReadStripingBase、Func`2操作)中的Raven.Client.Connection.ReplicationInformer.ExecuteWithReplication
c:\Builds\RavenDB Stable\Raven.Client.Lightweight\Connection\ServerClient.cs:174中的Raven.Client.Connection.ServerClient.ExecuteWithReplication(字符串方法,Func`2操作)

我知道这是我正在使用的RavenDB版本中的一个错误,但是目前我无法升级数据库。

用于检查字符是否为控制字符。

用于检查字符是否为控制字符。

作为一个补充,
字符串
实现了`
IEnumerable
,所以你实际上可以做
foreach(输入中的var c)
。另外,
string
实现了`
IEnumerable
,所以你实际上可以做
foreach(输入中的var c)
。哇,太棒了!TaThis可以将您的检查简化为
input.Any(char.IsControl)
哇,太棒了!这可以简化您对
input.Any(char.IsControl)
    string input = "2cancer'.pdf";

    char[] chars = input.ToCharArray();

    foreach (var c in chars)
    {
        if (char.IsPunctuation(c) || char.IsSymbol(c) || char.IsControl(c))
        {
            throw new Exception("Control character detected");
        }
    }