怎么把文本框中的内容从utf8变为ansi

博客指出在google中正常,但用百度搜索时,textbox1.text内容无法正确显示,分析可能是其编码为utf8所致。还给出了相关代码,包括使用WebClient发送请求、处理查询字符串、读取流等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

google中正常,但是用baidu ,我分析好像是textbox1.text的编码是utf8的原因,百度结果显示textbox1.text无法正确显示是乱码

 Dim myWebClient As New WebClient()

        Dim sQuery As String

        sQuery = "http://mp3.baidu.com/m"

        Dim myQueryStringCollection As New NameValueCollection()

        myQueryStringCollection.Add("word", TextBox1.Text)

        myQueryStringCollection.Add("rn", "")

        myQueryStringCollection.Add("f", "ms")

        myQueryStringCollection.Add("tn", "baidump3")

        myQueryStringCollection.Add("lm", "0")

        myQueryStringCollection.Add("ct", "134217728")

        myQueryStringCollection.Add("submit", "百度搜索")

        myWebClient.QueryString = myQueryStringCollection

        Dim strm As Stream = myWebClient.OpenRead(sQuery)

        Dim sr As New StreamReader(strm, System.Text.Encoding.Default)

        Dim sLine As String

        RichTextBox1.Clear()

 

        Do

            sLine = sr.ReadLine

            sLine = HttpUtility.HtmlDecode(sLine)

            RichTextBox1.Text += sLine + vbCrLf

        Loop Until sr.EndOfStream

import sys import re from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLineEdit, QCheckBox, QPushButton, QMessageBox) class LogicValidator(QWidget): def __init__(self): super().__init__() self.tcl_string = "预设的tclstring\n" self.initUI() def initUI(self): self.setWindowTitle('逻辑表达式验证器') self.setGeometry(300, 300, 400, 150) # 创建组件 self.input_field = QLineEdit() self.checkbox = QCheckBox('启用验证') self.submit_btn = QPushButton('提交') # 布局 hbox = QHBoxLayout() hbox.addWidget(self.input_field) hbox.addWidget(self.checkbox) vbox = QVBoxLayout() vbox.addLayout(hbox) vbox.addWidget(self.submit_btn) self.setLayout(vbox) # 连接信号 self.submit_btn.clicked.connect(self.validate_logic) def validate_expression(self, expr): """验证逻辑表达式,支持嵌套括号""" # 基础检查 if not expr: return False # 使用栈检查括号嵌套闭合 stack = [] for char in expr: if char == '(': stack.append(char) elif char == ')': if not stack or stack.pop() != '(': return False if stack: return False # 将表达式拆分为基本单元验证 return self.validate_tokens(expr) def validate_tokens(self, expr): """递归验证表达式中的各个部分""" expr = expr.strip() if not expr: return False # 循环移除外层匹配括号 while expr.startswith('(') and expr.endswith(')'): # 查找与第一个左括号匹配的右括号 pos = self.find_matching_bracket(expr) if pos == len(expr) - 1: expr = expr[1:-1].strip() else: break # 检查是否为基本单元 if self.is_atom(expr): return True # 尝试按操作符拆分 (OR 优先于 AND) for op in [' or ', ' and ']: parts = self.split_by_operator(expr, op) if parts: return all(self.validate_tokens(part) for part in parts) # 检查括号表达式 if '(' in expr or ')' in expr: # 尝试按最外层操作符拆分 return self.split_by_outer_operator(expr) return False def find_matching_bracket(self, s): """找到与第一个左括号匹配的右括号位置""" if not s.startswith('('): return -1 depth = 1 for i in range(1, len(s)): if s[i] == '(': depth += 1 elif s[i] == ')': depth -= 1 if depth == 0: return i return -1 # 未找到匹配 def split_by_operator(self, expr, op): """按指定操作符拆分表达式(仅在括号深度为0时拆分)""" depth = 0 start = 0 parts = [] n = len(expr) op_len = len(op) for i in range(n): if expr[i] == '(': depth += 1 elif expr[i] == ')': depth -= 1 elif depth == 0 and i + op_len <= n and expr[i:i+op_len] == op: # 确保操作符是独立单词 prev_ok = (i == 0) or expr[i-1].isspace() next_ok = (i + op_len == n) or expr[i+op_len].isspace() if prev_ok and next_ok: parts.append(expr[start:i].strip()) start = i + op_len if parts: parts.append(expr[start:].strip()) return parts return None def is_atom(self, expr): """验证原子表达式(单个元素)""" atom_pattern = re.compile(r'^\s*\{\s*[a-zA-Z0-9]+\s*\}\s*$') return bool(atom_pattern.match(expr)) def split_by_outer_operator(self, expr): """按最外层的操作符拆分表达式""" depth = 0 current = "" tokens = [] # 添加空格确保操作符被正确识别 expr = expr.replace('(', ' ( ').replace(')', ' ) ') # 遍历每个字符 for char in expr: if char == '(': depth += 1 elif char == ')': depth -= 1 # 在顶层遇到空格且不在括号内 if depth == 0 and char.isspace(): if current: tokens.append(current) current = "" continue current += char if current: tokens.append(current) # 验证操作符序列 if len(tokens) < 3 or len(tokens) % 2 == 0: return False # 检查操作符和操作数的交替模式 for i, token in enumerate(tokens): token = token.strip() if i % 2 == 1: # 操作符位置 if token.lower() not in ['and', 'or']: return False else: # 操作数位置 if not self.validate_tokens(token): return False return True def validate_logic(self): expr = self.input_field.text().strip() # 空输入检查 if not expr: QMessageBox.warning(self, '错误', '输入不能为空!') return # 验证流程 if self.checkbox.isChecked(): if not self.validate_expression(expr): QMessageBox.warning(self, '验证失败', '表达式格式错误或括号不匹配!') return self.tcl_string += f"qlineedit内容: {expr}\n" # 无论是否验证都添加基础字符串 self.tcl_string += "TCL STRING\n" # 保存文件 try: with open("output.tcl", "w") as f: f.write(self.tcl_string) QMessageBox.information(self, '成功', '文件已保存!') except Exception as e: QMessageBox.critical(self, '错误', f'文件保存失败: {str(e)}') if __name__ == '__main__': app = QApplication(sys.argv) window = LogicValidator() window.show() sys.exit(app.exec_()) 上述代码修改,如果Qlineedit是一个txt文件地址,那么读取文件内容赋值给expr
最新发布
06-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值