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

时间:2017-04-06 05:19:10

标签: vb.net winforms anglesharp

我正在使用AngleSharp来打开"打开"在网址中,更改value的{​​{1}}属性,然后提交input

但是当我从网址获取HTML代码时,我感到感兴趣的form name属性中的无法识别的字符。参见:

input

正如您所看到的,这是表格中唯一<!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> 所以我可以&#34;捕捉&#34;它(将input)更改为其他属性作为选择器。像这样:value

[type=password]

所以,问题是当我提交表单时,它会发送错误名称的帖子数据,但无法识别。我通过在浏览器中打开此URL来了解无法识别的字符,并使用Wireshark仔细检查它(以获取char的HEX值)。

最后,char在浏览器源视图中是一个希腊语context.Active.QuerySelector(Of IHtmlInputElement)("[type=password]").SetAttribute("value", "1111") ,而Wireshark表示它是A的符号C1,其描述为:Á(见http://www.ascii-code.com/

我知道创建这个网络界面的人,他告诉我他错误地使用了希腊Latin capital letter A with acute并且他无法改变它(我将解释原因)。

所以,既然我知道服务器的期望,我想我也可以设置A属性,然后发送表单。但是当我这样做时,并没有得到认可,因为我在Wireshark中检查时,char与提交表单时浏览器发送的char不同。 (我努力设置正确的名字,没有运气)。

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

我该怎么办?你有什么建议吗?

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

1 个答案:

答案 0 :(得分:1)

我必须创建一个Implements IEncodingProvider接口的类,然后通过with方法向Configuration构造函数提供此类的实例。

这是班级:

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的指导!