From b5bcf8e9c09d2385c448d43e23247c344239590c Mon Sep 17 00:00:00 2001 From: LukeMackin Date: Wed, 22 Jul 2026 00:59:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20UTF-8=20BOM+loadDataWithBaseURL(utf-8)?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B9=B1=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - frame.html/index.html 添加 UTF-8 BOM (EF BB BF) - loadDataWithBaseURL 显式设置 utf-8 编码 - WebView 以此识别中文内容 --- .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../android/app/src/main/assets/frame.html | Bin 4850 -> 2443 bytes .../android/app/src/main/assets/index.html | Bin 4756 -> 2396 bytes .../main/java/dev/yuzu/gca/MainActivity.kt | 5 +++-- 4 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/client-android/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/packages/client-android/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 6ccdc1d6cb6339a0e40b6c960b0627bde4863f2a..5950870a2f5970735ff713e73ac0f6fed7d7ee33 100644 GIT binary patch literal 17 UcmZQ>(-v{$|HmrA00tbB035Ue$^ZZW literal 17 UcmZQ>(-v{$|HmrA00ta^0334yi2wiq diff --git a/packages/client-android/android/app/src/main/assets/frame.html b/packages/client-android/android/app/src/main/assets/frame.html index f185378e0cfe536ba0390df8d37ce85595efe108..d4cb9d7f93e335b12920cd22ef47716967b06ae9 100644 GIT binary patch literal 2443 zcma)8&u`l{6u$efU|g(}>ROhQxN~L8MVba{Ry+{B3`ya!NM+dvdub%Ir#H3=> z7?%Hr2_tkgOqn4lN{G&x37dt9+x=#}D@n@2=9IIuOli|Zk&=cnNpw2Vs*p6e<;UGGH_0GULh0ZZ+hqON zA7q45E+;|vUUoi6iJov7_?L~OTLsMd2Nrbua8|o*^~W^sUpBn4k#oxPOpsYH7AiU& zl(2%X?|*R}b^AIh1VR2_tTbghkV*o$a^2R1@*)pxlJXK&PKzfhbPiZE#eoK0C2dCu zi%#dO7wfWZpTrA^7!~|Qu4;yOAbS%_adlrzwsMXt9`?G`_)-LN5WE#q<1lILO5=4g%pUe1+7 zL%<*rr=UEhVcYk*p5LZq+9r}}#c8_-Nx)__>_89*H7<++$2uBF0l{BYnI=*)5(JrPGnX)dtK{5mFTuDKxna zuqT*ZKAi1S2ZI%M2Lc2knLcLcrWNAXC%regmA3FV62lRIRze)BEL^M~mjb+OTqj$r z!n{!?$2GnH;a0tL2MuHar9|?W<;F6wQlw{c$9nSE*;w)P z;Lh6QFS$t^oEVc~*PYv2X2>Y@nGbw7jffybr%VI(X(~c1k*HIG)x3 zodxhZ|9g*Vt@LUh+*)j|2Tyw8doSq?N<;$WnH$SQ((|g17Dg$|!Dtf5fRsF8SD(#z|*j>tlDg z+?iGztM}h|{sbANkP;L*k}+VsyyXh=7Ir~oOX@4-!{rJs22@zl!$+Qw&E7o=t}b-h6~+m{!|4x862GthaFATT( zzYM$c27>-Rfwo?T7~JT*m@iPH#efN8B63zq=gyrw=-J*&bh3ANw14mn!8dk6zzi&^ zJ}WXP0J0MhyN%21rd*q40I5{sV&=hn?0Fv0RJB4DmR0fKt>w^xout=+Gux{gW>Dq{ zCMPBtbsu1R(#l?U-vp&c?Qj02kHNEU8#Bw8ije{KVNz+xjV~_DS_4DR9vlYiEsR@c zMK%^pvP@IS#Q}qIFeJ9HR!X%rj~?%Un$Xkzqo+H^yN@?k^|0vloJ`p+fzf57l;j*d h*?{|&a|Ho=me!KQl2>@1s__l)ihcgz#Vdbz{R4S;M#lgE literal 4850 zcmb`L=}sG06vxkJ`VvE{#wNrp3AA9Ah@_~YRYFy|D57a(>@heP8`%zokUT?QrH{~; z=^ONO+u#2l-^_R!Dxzv+d*n^2_C)u6AlUbCL{!^)O@YOmR8TE*75AEoU;DNa#cSc|($JGU;}16Cxf zYaQ;>@GYuKs2Z%Cz|&w|Ty=gcxgBYdt$paOusjXVN62dMe2pzGwZfhBx1hPQDtB7% z!gtQPq;A+zxI49DZ0h1k2N_lS%$DF?wlD2I`y0W|Hv7G>m$I7TZ4;`EAgcja3*KY) zm+cGI-mr59Z;v(YRH1#3)hF!dE$p-V7HQ&J8}cbCnYIV4A0fZVuOuw+G(h5Y&?#Tq z=#hU%fvaw(=+5FO$xB?HPqlSrs;zEG68uwKd+17o_ljR<7`be{!k#LnMFjg;5 zk@qvkrw+C1$m6QIP^451y%A3<#9y^2&#ntIwhYAz7T1W>c*dHnHOFK&(07SGMOwDs zBzYB&mh1skH%XSH;~V9ua@LV^G&L9Zhq=f{yeP8y+Nuz7J?xOrlB(_4XD!G2DBD;rFb*n1kd>C`(Rr0RK zI%%DZ)j~Yh{!?S#<0^deLKUi>*tA8g$k0H~dGw0d5HW5U#CVRUZ}}wlHF&raWT-ox zMzwqq5K7(E=Mp+aKZHOYJ=L{3A_;gTT+zKS%rQ?9cIqWMcbU%;(P=<;!LO(rP^j`7 zJg*KtaXG@$Mb>4BTXht&qijn{J#>Dw%~2s4qC>uCgtX!iz0mYD*p~IwkHk_Isq@M< z7wrAx>3n!l&AAg}fIc8vGgbZb;ALb5BHv?hzE`?&LgR6EVf(0`0wENgL~X*s*0Lu6tP1wx2?mkg+pzR$@hzFZq`2D5FF+-*J^fcf=T# z=(QR8QPZxDj99_$ahbU_N2f-w>1A0lu_d{*rR9P`MT=l2&VWudq{(wc^C_=Is=6YEcq7ZFZaFwL{#TEB)q zL8g#fc8|ud%APD6U6oJbiV+erb+Dm{B|@QC13Ro{-MtX@2SHYhfi#Zd$O8O|jv}Xf z)tNFJbxKQ_Q`~f&ikMDmI$!neXLxmzk{03rfcQzSvYUClYu|IpQ{_lL2_+iAKcQDd zxV&W>tg8YwzdHeevuL~`N8eDf`}PbEgk*kJEL(9ro{mMZJQ49x|6d_lwh1|Vh5jgW zT-t04RKeeBig8Yg@B zV~?l}@I$t`+@)asX0C=J&BX{sQ9bYQhVv~M5q5U@6^^K`%VmdWTf^ec4PJ23DO?{9PL zs2jZ=%Q>#%-X2A;ga{}in(TTzY83kCS#taHwLVKdeau|Axt{LWonbB}bqOhztN*)( zRXsv;og}hpJ?XJBdfO>DeqQlD8b7gYf$2hBy;0{;=dS5Wz|mc>JYiA_s}Gp5!qz10 z-VK@4+)Lng8Tonkn(pxqkbjOUDDu{9kET5 zJL?tADPfo9lctkS>#KY_U*r+O>GW}qM4dAvU-N96bM!-KBhNe(hpfE-bu%5K`Ul7< zoo)k;3eLquaKFh9B=xCjciYBnn+5IqUB{P;;-C!P3z*1yN(J(K_d diff --git a/packages/client-android/android/app/src/main/assets/index.html b/packages/client-android/android/app/src/main/assets/index.html index 0c465acf99d8e143ffb8f364f868a4cae77371eb..d265b14985bf18d8e1ab4ac29f8ec50a48ded404 100644 GIT binary patch literal 2396 zcma)8PjA~c6umpI^)zNA!TzOv2OX% z2CunU2sUX=6MfEIUIWW(4W zWrR{LXF>m7c0Njpo^cuYm#w5O7)@R#3iB}oMaa?OsbtZ)(bX|Ec^tb4`vQV>i9kzLYYkE_~Cgk#dvK3lgqq3lH zHBxfkO&FggCfM?Q5U4rRu~28-ML-Ipn$=nTvxFPgE&CK?8rrH!2AOjit7VP${cW-} z9sb*}ZWCaOpjG2uMT2p#qL*cZWn6#qym(unuXcCfrVkRz=O_{+&%?Hj(VjqhIad;m zAqR;#1?DjgV&Cg~ewUJYmq@A=r`-Vr0iDUX2Ts7%v@iw?Yi~dW1bCKlK3%6uW}j+M3%P?1ap zqmw^>`|huI@7{~jC?2}qF0Jk1x}-ePJTsHloM=SF6D>lF?^5xU>FRKt5IBs=dl+6R znFxXQL>wEX$&7h3X7&wB9XyN3>skZ57Z*4;HZw4d3mF*;I0SZ5cS%)Lq%hvrbWbpQ z{9>_B9Srx_1tLhMPuRKXglPwVBk^VH#>E=8%U0w zs;OSgOq5vv4z8KtnR5eyjpnIiEqUy0G%P)+M4S8>H;IE2V>0ZzOIr)xJ30ywmvbUG zMQhGRnwdh&%PNgG;n&B92VQ1(pR<<7qdGxnm3SThjmNZBx)}#|R>F1X$sl~=C4*6! zkpR-=#v+jnyy~NaQ3~6w62a+po#+aqdFX&{;{tjIXlMpIE@Dpa#Vfyi|7CA>7o>O7 zMd*C6f8e;;zyI-5fn4ITFO8EfK-b6a_*ycr1kL()9zR4zDWn8Nj${lFFRN^1-oY+* zZ_ugu48;{%jHs|whL1cUn}d5cxw_Tm&BaCUmA|~Vefdexvk*F^bgj{Ki;z@kT5v&| zp@1^ifNzB1$3k@bcGC(&K_6@BE?Wo&_9@KiwTsaQjaLf;+OygiVN68MD%RY&a|a#l zJws3Tj*j;a4-kA~7r4tnqZ+Xy1MHDqY1nOD-pu3La)Ojf60VjQJg}bU0Zi2tWMSD5 z4<1hr!`Dj&J-D-Ds$r>Qo?vojl1cw_Y;QW*i~h@?w5aXPe~d6#))QkE8B;MbfIh4q z4YBdXg;|?j7}vw2V10UV$21sYlS!__R7`O|q1*|HZLDQc&C25kJ3u7#X#e=p&dKhB yjV2#fL!Og4+a<8Itd|m;!-pGCZ@E$spl4w%K`e2F_omv%@KD(I44$y^htxmar#5*2 literal 4756 zcmb`LX>uDy7>2*!<`QF;NKPVIPHb=_+ms0|FjQg+vs5aClq`*wSe8_hV#g6V16Sb) zT!tI)8+hLCY0qdGQKqOVNi*HwzP$a7{{Cyv*6njUvB&nEJ+p7@$Rg|5#4fC72exK= znJ3-HR<|ZQdr-vC)uC^&Ubm5r-O9ebZ?D;DS;=;}pQY_XDNa#cT9>;k8`=Qw2`iE{ zus-*(`xey|R83Yo@HAN$SA*YDW=C3N>lnIgERWsu8M2x@PqD>IEpaFPU1+YY%AM8+ z@C{j))S8{SyK`$}(*RHU$f()}R)KfRKCuVv*PNX__D60nW;Mp!7F0DSs|i;Z-ZuMN z_AzU3*tvjr#F}=h(7wa!4*OXP$LzjEn)r4TK1C(f_K@{6cv>Rr6x&!_CsOknYq8dvli5Vy75Wru*}h8h z4jxtPAylg*OHzBK997OEWMwu#EKLR^qfVnfDHlTwm^($c>0!4WM6=XhfapN)6=My zFC9XuyT)8Xr{ISW$VX3gt&WHs9tl@;FAVdTrwDuM3Z1*fr$Tg^&|UH?>LwJb{3g#k zi6>r;uym7kS>mlabJx;xop2p$2?1DYaQoXlfaL zf3o(;RP1EPf(Dd5J4KUFvQ8(*)R4X>cI+~CLCy-Si1H=hk{x6e$mTCx1=k%RMg@9p zjegW=*FZ+7VDE8}b8CZ6Ro;ZqI=_X=LF*Cr#5b#-k+EZFWrOFJ&N4E+4I?Ivm`TFoMLs9Xpz2IU#sjDkUzV+;e3s5awHV#V_gfYgcu=ThpeWZ zSa$mpCo9-5jk7&phF_j}k0-7sl#QTMT8d0u%XOBMoM;vr+mG0!sYhCb)f1{qa+QgY zmjd(Jw_Ng6@m1ZaqnkYETUNs^Rg2ErzKePqjaTI4E2`_no{}@6j-Ts_mLHENa}g{q zM10o&S4b8L3gt$*{wQLwB`IjD*)hGG#Z^glNjpq&up^h|DOCvs8ZV zT~TP=LL!N~Wz6zDgAV0sOXK^dSZ^c1puijspxnB9)c&oD&zD^bC9qP6yzPgI;*qtN; zi@Jo5%FzFs05;YY_zD}_NCf!e=4LtXtc+T1j zur}?&S^X2_wWcW@*kpqK%Nv!U;BRQ(WEB33a*be$LM6xNjHD)`qTBq zov`vV535w;6BobylU4s;%zKl?lwu+wMb}PZbrvhKXaA{viA0Y`kv*ZtPWe7$zIx2g zdXkw%ix#cWyGIO{{sYllQm`eRGfu$bbs{NgX|y6ZG^K}XO)D|2SG_OH&d2@@!v8np MXKBqh;UA}e0P#32MgRZ+ diff --git a/packages/client-android/android/app/src/main/java/dev/yuzu/gca/MainActivity.kt b/packages/client-android/android/app/src/main/java/dev/yuzu/gca/MainActivity.kt index 70d1629..8952259 100644 --- a/packages/client-android/android/app/src/main/java/dev/yuzu/gca/MainActivity.kt +++ b/packages/client-android/android/app/src/main/java/dev/yuzu/gca/MainActivity.kt @@ -25,8 +25,9 @@ class MainActivity : AppCompatActivity() { loadDataWithBaseURL("file:///android_asset/", html, "text/html", "UTF-8", null) Log.i(TAG, "Loaded cached HTML (${cacheFile.length()}B)") } else { - loadUrl("file:///android_asset/frame.html") - Log.i(TAG, "Loaded frame.html") + val html = assets.open("frame.html").bufferedReader().readText() + loadDataWithBaseURL("file:///android_asset/", html, "text/html", "utf-8", null) + Log.i(TAG, "Loaded frame.html (${html.length}B)") } } setContentView(wv)