代码之家  ›  专栏  ›  技术社区  ›  Justin C

允许输入高于UTF-8的ASP.NET多行文本框

  •  0
  • Justin C  · 技术社区  · 16 年前

    在我的web.config中

    <globalization
      fileEncoding="utf-8"
      requestEncoding="utf-8"
      responseEncoding="utf-8"
      culture="en-US"
      uiCulture="de-DE"
    />
    

    在我的页面指令中

    ResponseEncoding="utf-8"
    

    然而,出于某种原因,带有textmode=“multiline”的ASP文本框允许输入UTF-8之外的字符。当我将以下文本行粘贴到非多行的ASP文本框中时

    “test”
    

    非UTF-8字符将被替换,但在使用多行文本框时不会。

    有什么想法吗?

    编辑: 为了进一步解释我在中看到的设置问题,这里有4个文本区域可以放在ASP页面上。

    <asp:TextBox ID="txtTest1" runat="server"></asp:TextBox>
    <asp:TextBox ID="txtTest2" runat="server" TextMode="MultiLine"></asp:TextBox>
    <input id="Text1" runat="server" />
    <textarea id="Textarea1" cols="100" rows="8" runat="server"></textarea>
    

    如果您在页面指令中使用responseencoding,在上面描述的全球化选项卡中使用web.config,在这4种不同类型的文本区域中复制并粘贴带有引号的测试行,为什么字体会有所不同?

    2 回复  |  直到 16 年前
        1
  •  3
  •   Mike Schenk    16 年前

    只是为了澄清一下…UTF-8是一种覆盖所有Unicode字符的字符编码方案。因此没有“非UTF-8字符”这样的东西。

    字符串的编码与屏幕上这些字符的图形表示无关(例如,在网页的<input type=“text”>或<textarea></textarea>控件中)。在您的示例中,有些字体将排印者的引号显示为直引号,而另一些字体将UTF-8字符显示为卷曲引号。

    ResponseEncoding设置确定传输哪些字节来表示组成页面HTML的字符,以及以表单文章和URL编码的字符返回页面。常见的编码是UTF-8、ISO 8859-1和Windows-1252。这些编码有很多相似之处,但它们也有不同之处。但是,您可以使用Windows-1252字符集和编码(也包括那些花引号字符)传递非常相同的页面,并且您将看到完全相同的结果。

    所以简而言之,不要混淆字符编码和字体样式。

    顺便说一下,responseencoding=“utf-8”指令是多余的,因为web.config中设置了相同的内容。不管怎样,utf-8是默认的,所以在web.config中甚至不需要它。

        2
  •  1
  •   Jeff Widmer    16 年前

    您看到的是应用于文本区域(多行文本框)Verse文本框(输入)的不同默认字体。文本区域使用Courier New,单行文本框使用Arial。如果应用的样式将文本框和文本区域的字体系列设置为相同,则粘贴的文本将匹配。尝试这些,您应该看到粘贴的内容完全匹配:

    <asp:TextBox ID="txtTest1" runat="server" style="font-family: Courier New;"></asp:TextBox>
    <asp:TextBox ID="txtTest2" runat="server" TextMode="MultiLine" style="font-family: Courier New;"></asp:TextBox>
    <input id="Text1" runat="server" style="font-family: Courier New;" />
    <textarea id="Textarea1" cols="100" rows="8" runat="server" style="font-family: Courier New;"></textarea>