近段时间在做战斗系统,昨天观察日志时发现中文显示乱码,而且奇怪的是有些中文日志是正常的,有些中文日志乱码
就是下面这种表现
Debug - Thu Oct 24 20:42:35 2019 : systems/ability/AbilityPlugin.cpp_104:AbilityPlugin::SetAbility(),战斗房间=1012,playerID=1012,roleID=1,abilityName=cur_hp,abilityValue=88
Debug - Thu Oct 24 20:42:35 2019 : systems/action/actionplugin.cpp_238:ActionPlugin::do_cast_spell() 缁撴潫, 鎴块棿ID=1012, 驴驴驴ID=1013, 驴驴ID=1, 驴驴驴驴ID=1012, 驴驴ID=1, 驴驴ID=1,
Debug - Thu Oct 24 20:42:35 2019 : game_engine.cpp_169:[CGameEngine]::SendToClient sockindex=1 SendToClient cmd=118 size=35
Debug - Thu Oct 24 20:42:35 2019 : systems/scene/battleroom.cpp_94:[CBattleRoom] OnRoomRun userid=1012 lTime=1571920955508 m_tickFlag=1571920956008 m_tickIndex=50.
Debug - Thu Oct 24 20:42:35 2019 : systems/ai/logic.cpp_45:鎴樻枟鎴块棿=1013, 鏂芥硶鑰匢D=1012, 瑙掕壊ID=1锛屾柦娉曠洰鏍嘔D=1013, 瑙掕壊ID=1, 鎶€鑳絀D=1, 褰撳墠鏃堕棿=1571920955509
可以看到AbilityPlugin.cpp的中文显示是正常的,但actionplugin.cpp的中文显示就是乱码
相信大家的第一反应就是这两个cpp文件的编码格式不同
我也是修改VScode中文件的编码格式,但是非常不幸的是编译执行后还是乱码
(后来才知道,我只是修改了VScode的解析方式,没修改cpp文件本身的编码方式,巨坑啊)
下面说正规的解决办法:
1. 用vim 打开代码文件
2. 查看文件的编码方式,即命令 set fileencoding 应该不是utf-8的
3. 设置文件的编码方式,即命令 set fileencoding=utf-8
4. 保存文件
5. 重新编译后运行,日志文件打开时也以utf-8方式进行解析,这个时候就都能正常显示了
如下图:
Debug - Thu Oct 24 21:04:26 2019 : systems/ability/AbilityPlugin.cpp_104:AbilityPlugin::SetAbility(),战斗房间=1017,playerID=1016,roleID=1,abilityName=cur_hp,abilityValue=78
Debug - Thu Oct 24 21:04:26 2019 : systems/action/actionplugin.cpp_239:ActionPlugin::do_cast_spell() 结束, 战斗房间=1017, 施法者ID=1017, 角色ID=1, 施法目标ID=1016, 角色ID=1, 技能ID=1,
Debug - Thu Oct 24 21:04:26 2019 : game_engine.cpp_169:[CGameEngine]::SendToClient sockindex=2 SendToClient cmd=118 size=35
Debug - Thu Oct 24 21:04:26 2019 : systems/ai/logic.cpp_45:战斗房间=1017, 施法者ID=1016, 角色ID=1,施法目标ID=1017, 角色ID=1, 技能ID=0, 当前时间=1571922266013
注意:源码文件其他方式的编码也是可以的,但是查看日志的时候也需要对应的编码方式才行,为了统一,我们用utf-8