找回密码
 立即注册
搜索
查看: 726|回复: 0

[软件] [弱智]记录一下UTF8 win10绕过mecab乱码问题的办法

[复制链接]
     
发表于 2020-11-10 09:49 | 显示全部楼层 |阅读模式
本帖最后由 冰箱研会长e-3M 于 2020-11-10 09:51 编辑

Win10 2004 UTF8模式下直接使用mecab cli会出现的情况:

mecab无法正确接收英文字母和数字以外的字符。
  1. 注: powershell环境
  2. [Console]::OutputEncoding = [System.Text.Encoding]::UTF8;
  3. [Console]::InputEncoding = [System.Text.Encoding]::UTF8;
复制代码


这个问题, 我在中文网络英文网络日文网络都没找到好的解决方案,
反正mecabdll的工作情况是正常的, 对于开发工作而言想必不是什么大问题.
这里主要是为了直接在cli使用mecab.

这个问题很明显是console传递文字的机制的问题,

以往和ffprobe/mediainfo战斗的经验告诉我这类问题要么无解, 要么解得献祭个一天两天的时间和自己的好心情.
所幸mecab有直接读取输出到文件的io模式, 那就可以用powershell来实现一个 "绕路" workaround.
这里简单记录一下, 以防其他像我这样没有技术的人被迫在WSL里用mecab.

GITHUB
原理没什么好说的, 就是把文字输入到临时文件里做中专而已, 是相当没有意义的代码.

  1. function mmecab{
  2.     param (
  3.         [string]$InputString
  4.     )
  5.     Set-Content -LiteralPath "$($PWD)/temp.txt" -Value $InputString;
  6.     mecab "$($PWD)/temp.txt" -o "$($PWD)/temp-output.txt";
  7.     Get-Content -LiteralPath "$($PWD)/temp-output.txt";
  8.     Remove-Item -LiteralPath "$($PWD)/temp.txt";
  9.     Remove-Item -LiteralPath "$($PWD)/temp-output.txt";
  10. }
复制代码

基于同样的原理, 那使用pipline代替临时文件也是可能的.
于是只需要
  1. echo "文字" | mecab
  2. #echo 是 Write-Output的别名
复制代码
也可以实现一致的效果, 总之, 只要回避从命令行直接对mecab输入文字, 把这个过程抛给shell就可以解决 "文字化け" 现象.

经过以上设置, 可以获得正确的输出.



以上.




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2024-9-25 01:18 , Processed in 0.028238 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表