删除 - (不间断空格) - 以某种方式添加到 GridView 的绑定值中

Posted

技术标签:

【中文标题】删除 - (不间断空格) - 以某种方式添加到 GridView 的绑定值中【英文标题】:Remove   - (non-breaking space) - added somehow in binded value on a GridView 【发布时间】:2022-01-23 22:08:12 【问题描述】:

我正在开发一个在框架 3.5 中构建的 C# Web 应用程序项目,其中 - 出于某种奇怪的原因我还没弄清楚 -   - ( non-breaking space) 已添加。

这是场景:

我查询绑定在 GridView 中的某些数据。从数据库返回的值之一是:

04/03/2013 12:00:00 a.m.

屏幕截图显示正确返回值:

但是,当绑定这个值时——即:GvEmployee.DataBind();——在名为“GvEmployee”的GridView的“RowDataBound”事件中,该值显示为: p>

4/03/2013 12:00:00 a. m. - 注意添加的不间断空格。

然后出现System.FormatException 异常:

System.FormatException: '字符串未被识别为有效 日期时间。'

此错误是由于不间断空格和a.m. 附加字符串造成的。如果我在运行时调试时删除这些字符,则可以完成 DateTime 转换。

这是发生错误的代码:

protected void GvEmployee_RowDataBound(object sender, GridViewRowEventArgs e)

    string id; // This is a reusable variable.

    // Check rows only: 
    if (e.Row.RowIndex >= 0)
    
        // Get the value stored in the given cell at the row: 
        id = e.Row.Cells[3].Text;
        
        // Here, the value of "id" variable is: "4/03/2013 12:00:00 a. m.".
        // But, the value returned by the database is: "04/03/2013 12:00:00 a.m.".
        
        // Check if the "id" variable is not empty...
        if (!id.Equals(" ") && !string.IsNullOrEmpty(id))
        
            // Here fails, due to the value of "id" variable, that is: "4/03/2013 12:00:00 a. m."
            // isn't recognized as a valid DateTime value.
            e.Row.Cells[3].Text = Convert.ToDateTime(id, CultureInfo.CurrentCulture).ToShortDateString();
        
    

如你所见,字符串值上的non-breaking space:

这很奇怪,因为这个项目已经发布并且只发生在我的笔记本上 - 我相信我用于这个项目的笔记本中缺少一些配置,但是,我没有找到任何关于那可能是什么 - 我不知道不间断空格,直到这个问题发生在我身上,我在 Stack Overflow 上找到了这个 answer...

我已经搜索了这个问题的根源,并尝试通过在 Global.asax 中添加此source 中显示的配置来解决此问题,并在此处添加为清楚起见:

protected void Application_BeginRequest(Object sender, EventArgs e)

    System.Globalization.CultureInfo newCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
    newCulture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
    newCulture.DateTimeFormat.AMDesignator = "";
    newCulture.DateTimeFormat.LongDatePattern = "dd/MM/yyyy";
    newCulture.DateTimeFormat.LongTimePattern = "HH:mm:ss";
    newCulture.DateTimeFormat.PMDesignator = "";
    newCulture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
    newCulture.DateTimeFormat.TimeSeparator = ":";
    newCulture.DateTimeFormat.DateSeparator = "/";
    System.Threading.Thread.CurrentThread.CurrentCulture = newCulture;

并搜索了如何通过更改项目的 web.config 和/或 Global.asax 中的某些配置来全局删除那些不间断的空格,但是到目前为止没有任何效果。

找到的其他替代方法是使用正则表达式来删除有问题的字符,但是,我正在寻找一个全局设置来应用 - 由于 这种情况发生在所有项目中 - 不是只有一页,不仅上面发布了给定的日期时间值,而且,我已经检查了来自数据库的响应并且它是正确的 - 问题必须在 ASP.NET C# Web 项目中,但是,我没有不知道发生这种情况的确切地点和原因。

我不知道还有什么可能,可能是操作系统的语言?还是计算机的文化设置?...

我没有想法,感谢任何帮助。

【问题讨论】:

【参考方案1】:

tl;dr:我在 Visual Studio 中应用了这些更改和设置 - 不确定是哪一个应用了该问题的解决方案,但是,我会保持原样 - 因为它对我有用:

放弃我在问题中描述的 Global.asax 文件中所做的更改。 取消选中此路径中的Save documents as Unicode when data cannot be saved in codepage 选项:Tools > Options > Environment > Documents - 归功于this answer。 从源代码管理中下载有问题的 aspx/ascx 文件的最新版本 - (此项目在 TFS 上) - 覆盖本地文件1。 在解决方案的 Site.master 上应用了这行代码:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> - 归功于 this answer。

1我忘了提到这个项目在 TFS 上,当我在这个笔记本上下载项目时,我收到了这个警告:

Source of the image

我忽略了那个警告,我想我选择了OK -> 我认为这是问题的根源。


长版:我正在做的项目是在 TFS 上;当我在笔记本中下载项目时——这是一个全新的项目——我记得我收到警告说:

此文件包含 Unicode 格式的字符,如果您将此文件保存为 ANSI 编码的文本文件,这些字符将会丢失。要保留 Unicode 信息,请单击下面的取消,然后从编码下拉列表中选择一个 Unicode 选项。继续?

我选择了 OK - 如果我没记错的话 - 项目下载继续进行,没有更多警告。

当我编译项目的所有部分并执行它时,一切都很好 - 直到我来检索一些数据 - 检查是否一切正常(因为这个项目使用 Oracle 作为数据库并且根据我的经验这个项目和 Oracle 有时会出现意外错误),我得到了我在问题中描述的错误。

在尝试了所有我能想到的之后,我突然想起了我在下载项目时收到的警告。

然后,我开始搜索如何检查项目中文件的编码,我得到 this answer (1) - this answer (2) 看起来也很有希望,但是,当我尝试并且 - 据我了解 - 第一个链接的答案说手动逐个文件制作这些步骤=这是不可行的;关于第二个链接的答案,我在.sln.csproj 文件中找不到位置。

我一直在 Google 上搜索并添加 visual studio check aspx encoding,其中一个答案是 this answer,我在项目的 Site.master 上添加了这一行 - 因为所有页面都使用此母版页:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 

当我执行解决方案/项目时,不间断的空格消失了,并且 DateTime 转换成功,如下面的屏幕截图所示:

【讨论】:

以上是关于删除 - (不间断空格) - 以某种方式添加到 GridView 的绑定值中的主要内容,如果未能解决你的问题,请参考以下文章

制表符空格而不是多个不间断空格(“nbsp”)?

VBA Trim CleanString 删除空白(空格)字符

word表格中出现了横条,怎么样消除

PHP - 添加/删除回车返回到 base 64 编码的字符串

RichEdit 忽略了不间断的空间

jQuery:在 Textarea 的内容中附加一个不间断的空格