Anglesharp context.openAsync() returns 无法识别的字符。我能做什么?

Anglesharp context.openAsync() returns unrecognized character. What can I do?

我正在使用 AngleSharp 来 "open" 一个 URL,更改 inputvalue 属性,然后提交 form.

但是当我从 URL 获得 HTML 代码时,我在 inputname 属性中得到一个无法识别的字符,这让我很感兴趣。参见:

<!DOCTYPE html>
<html>
<head></head>
<body>
<hr>
<center>USER MENU<hr></center> 
<form method="post" name="input" enctype="text/plain"> 
<fieldset>
<legend>ENTER USER CODE</legend>
ENTER USER CODE: <input type="password" name="�00" maxlength="4">
<br>
<button type="submit" formenctype="text/plain">SEND</button>
</fieldset>
</form>
</body>
</html>

如您所见,这是表单中唯一的 input,因此我可以通过它的其他属性作为选择器来 "catch" 它(以更改 value)。像这样:[type=password]

context.Active.QuerySelector(Of IHtmlInputElement)("[type=password]").SetAttribute("value", "1111")

所以,问题是当我提交表单时,它发送了名称错误的 post 数据,并且它们无法被识别。我通过在浏览器中打开此 URL 了解了无法识别的字符是什么,并使用 Wireshark 仔细检查它(以获取字符的十六进制值)。

最后,该字符在浏览器源代码视图中是一个希腊字母 A,正如 Wireshark 所说,它是 C1 的符号,即 Á,描述为:Latin capital letter A with acute(参见 http://www.ascii-code.com/

我认识创建此 Web 界面的人,他告诉我他错误地使用了希腊语 A,他无法更改它(我会解释原因)。

所以,既然我知道服务器期望什么,我想我也可以设置 name 属性,然后发送表单。但是当我这样做时,它不会被识别,因为我在 Wireshark 中检查时,该字符与您提交表单时浏览器发送的字符不同。 (我在运气不好的情况下努力设置正确的名称)。

我还认为这可能是某种编码问题,但我没有设法在 context 配置中设置编码。在获得 HTML 之前,我将文化设置为 "el-GR",但没有任何改变。

我能做什么?你有什么建议吗?

PS。这是一个由微控制器托管的低安全性 Web 界面。 HTML 无法更改,因为设备已经获得认证。此外,该界面在浏览器中使用时效果完美。

我必须创建一个 class Implements IEncodingProvider 接口,然后通过用方法。

这是 class:

Private Class FixedEncodingProvider
    Implements IEncodingProvider

    Public Function Suggest(locale As String) As Encoding Implements IEncodingProvider.Suggest
        Return Encoding.GetEncoding(1253)
    End Function
End Class

然后像这样使用它:

Dim Config = Configuration.Default.WithDefaultLoader.With(New FixedEncodingProvider())
Dim context = BrowsingContext.[New](Config)

特别感谢库的创建者 FlorianRappl 的指导!