From afbc421c29cbbf6a40613bd37d63044b6444530b Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Sat, 30 Nov 2019 11:58:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E7=99=BB=E5=BD=95=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oauth/create_or_find_wechat_account_service.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/services/oauth/create_or_find_wechat_account_service.rb b/app/services/oauth/create_or_find_wechat_account_service.rb index 396d8c107..257146cdd 100644 --- a/app/services/oauth/create_or_find_wechat_account_service.rb +++ b/app/services/oauth/create_or_find_wechat_account_service.rb @@ -24,7 +24,16 @@ class Oauth::CreateOrFindWechatAccountService < ApplicationService new_user = true # 新用户 login = User.generate_login('w') - @user = User.new(login: login, nickname: result['nickname'].force_encoding('UTF-8'), type: 'User', status: User::STATUS_ACTIVE) + cd = CharDet.detect(result['nickname']) + Rails.logger.info "encoding: #{cd['encoding']} confidence: #{cd['confidence']}" + # 字符编码问题,GB18030编码识别率不行 + decode_content = + if cd["encoding"] == 'GB18030' && cd['confidence'] > 0.8 + result['nickname'].encode('UTF-8', 'GBK', {:invalid => :replace, :undef => :replace, :replace => ' '}) + else + result['nickname'].force_encoding('UTF-8') + end + @user = User.new(login: login, nickname: decode_content, type: 'User', status: User::STATUS_ACTIVE) end ActiveRecord::Base.transaction do