CMD当前页码修改

文章讲述了在Python3.x开发中,由于CMD默认GBK编码与程序UTF-8编码不一致导致的乱码问题。提供了两种解决方案:一是使用`chcp`命令临时修改CMD编码,二是通过修改注册表永久性改变CMD编码设置。

python3.x在程序开发中统一的编码是 UTF-8,但是进行交互式编程的时候会经常遇到乱码问题,这是因为Window cmd的默认编码是GBK。与程序采用的 UTF-8 不一致造成的中文及特殊字符乱码。

先来查看下当前cmd窗口的当前代码页:在标题栏点击右键, 打开属性面板, 会看到”选项”标签页下方显示”当前代码页”的编码. 然后选择”字体”标签页, 把字体设置为Lucia Console, 然后确定关闭.

e25088fb05794fe5909c771832f2e599.png

 第一种:临时性修改编码

使用 chcp 命令,例如 chcp 437 ,这回将当前代码页变为 MS-DOS 美国英语,不过这种方式在关闭 cmd 之后会自动失效

a193f4fc70694860b460b3bfd7d2cafd.png

 常用的编码及对应的码值(10进制):

十进制码值     对应编码名称

950                      繁体中文

65001                UTF-8代码页

936                    简体中文默认的GBK

437                    MS-DOS 美国英语

第二种:永久性修改:通过修改注册注册表达到。

打开注册表方法:

7276f789023648219b313f7d1bacd018.png

 定位到:HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe

d8c1128992af4f44a58e9413b81742cb.jpg

 选择十进制输入对应编码

6257b47b62844730968feb6f6fce423f.png

 

 

 

 

// 解析HMI指令帧(包含帧头校验、指令分发) static void ParseHmiFrame(u8 *frame, u16 frame_len) { if (frame_len < 2) return; // 至少需要帧头 if (frame[0] != HMI_FRAME_HEAD1 || frame[1] != HMI_FRAME_HEAD2) { //帧头必须为0x5A或者0xA5 return; // 帧头错误,丢弃 } unsigned char cmd = frame[2]; // 提取指令类型 switch (cmd) { // ------------------------- // 1. 页面切换指令处理 // ------------------------- case HMI_CMD_SWITCH_PAGE: { if (frame_len < sizeof(CmdSwitchPage) + 9) return; // 帧头+指令共12字节 CmdSwitchPage *cmd_sw = (CmdSwitchPage*)&frame[4]; if (cmd_sw->target == 0) { // 跳转到【参数设置页】 Dgus_PageChange(PAGE_PARAM); // 更新参数页显示:读取当前参数并写入DGUS Dgus_WriteWord(DGUS_ADDR_OUTPUT_FREQ, Param_GetCurrentValue(PARAM_OUTPUT_FREQ)); Dgus_WriteWord(DGUS_ADDR_OUTPUT_VOLT, Param_GetCurrentValue(PARAM_OUTPUT_VOLT)); Dgus_WriteWord(DGUS_ADDR_VOLT_PROT, Param_GetCurrentValue(PARAM_VOLT_PROT)); Dgus_WriteWord(DGUS_ADDR_CURR_PROT, Param_GetCurrentValue(PARAM_CURR_PROT)); Dgus_WriteWord(DGUS_ADDR_TEMP_PROT, Param_GetCurrentValue(PARAM_TEMP_PROT)); } else if (cmd_sw->target == 1) { // 跳转到【历史故障页】 Dgus_PageChange(PAGE_FAULT); // 更新历史页显示:获取当前页记录并写入DGUS FaultRecord page_buf[FAULT_PER_PAGE] = {0}; Fault_GetPageRecords(g_current_fault_page, page_buf); for (u8 i = 0; i < FAULT_PER_PAGE; i++) { u16 addr = DGUS_FAULT_PAGE_BASE + i * 16; Dgus_WriteWord(addr + 0, page_buf[i].fault_code); // 故障代码 Dgus_WriteString(addr + 2, page_buf[i].fault_type); // 故障类型 // Dgus_WriteString(addr + 22, page_buf[i].detail); // 故障明细 // Dgus_WriteWord(addr + 72, page_buf[i].time_stamp); // 时间戳 Dgus_WriteWord(addr + 76, page_buf[i].level); // 故障等级 } Dgus_WriteWord(DGUS_FAULT_PAGE_NUM, Fault_GetCurrentPage()); // 页码 } else if (cmd_sw->target == 2) { // 【开机】 //用RS232发送指令,AA开机,55关机 // Dgus_WriteWord(0xFFFF, 0x00); // 假设息屏寄存器为0xFFFF,值0x00表示息屏 u16 GetSwitch(ENUM_SWITCH_TYPE id); // 获取当前值(编辑中返回临时值) }else if (cmd_sw->target == 2) { // 关机】 } break; }这是我的部分代码,你再看看怎么解决报错
07-06
static void ParseHmiFrame(u8 *frame, u16 frame_len) { if (frame_len < 2) return; // 至少需要帧头 if (frame[0] != HMI_FRAME_HEAD1 || frame[1] != HMI_FRAME_HEAD2) { //帧头必须为0x5A或者0xA5 return; // 帧头错误,丢弃 } unsigned char cmd = frame[2]; // 提取指令类型 switch (cmd) { // ------------------------- // 1. 页面切换指令处理 // ------------------------- case HMI_CMD_SWITCH_PAGE: { if (frame_len < sizeof(CmdSwitchPage) + 9) return; // 帧头+指令共12字节 CmdSwitchPage *cmd_sw = (CmdSwitchPage*)&frame[4]; if (cmd_sw->target == 0) { // 跳转到【参数设置页】 Dgus_PageChange(PAGE_PARAM); // 更新参数页显示:读取当前参数并写入DGUS Dgus_WriteWord(DGUS_ADDR_OUTPUT_FREQ, Param_GetCurrentValue(PARAM_OUTPUT_FREQ)); Dgus_WriteWord(DGUS_ADDR_OUTPUT_VOLT, Param_GetCurrentValue(PARAM_OUTPUT_VOLT)); Dgus_WriteWord(DGUS_ADDR_VOLT_PROT, Param_GetCurrentValue(PARAM_VOLT_PROT)); Dgus_WriteWord(DGUS_ADDR_CURR_PROT, Param_GetCurrentValue(PARAM_CURR_PROT)); Dgus_WriteWord(DGUS_ADDR_TEMP_PROT, Param_GetCurrentValue(PARAM_TEMP_PROT)); } else if (cmd_sw->target == 1) { // 跳转到【历史故障页】 Dgus_PageChange(PAGE_FAULT); // 更新历史页显示:获取当前页记录并写入DGUS FaultRecord page_buf[FAULT_PER_PAGE] = {0}; Fault_GetPageRecords(g_current_fault_page, page_buf); for (u8 i = 0; i < FAULT_PER_PAGE; i++) { u16 addr = DGUS_FAULT_PAGE_BASE + i * 16; Dgus_WriteWord(addr + 0, page_buf[i].fault_code); // 故障代码 Dgus_WriteString(addr + 2, page_buf[i].fault_type); // 故障类型 // Dgus_WriteString(addr + 22, page_buf[i].detail); // 故障明细 // Dgus_WriteWord(addr + 72, page_buf[i].time_stamp); // 时间戳 Dgus_WriteWord(addr + 76, page_buf[i].level); // 故障等级 } Dgus_WriteWord(DGUS_FAULT_PAGE_NUM, Fault_GetCurrentPage()); // 页码 } else if (cmd_sw->target == 2) { // 【关机】 //用RS232发送指令,AA开机,55关机 // Dgus_WriteWord(0xFFFF, 0x00); // 假设息屏寄存器为0xFFFF,值0x00表示息屏 // u16 GetSwitch(ENUM_SWITCH_TYPE id); // 获取当前值(编辑中返回临时值) } break; } 这段代码里显示报错1_App\task_hmi_uart4.c(383): error C141: syntax error near 'unsigned', expected '__asm',怎么解决·
07-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值