大贤者
精华
|
战斗力 鹅
|
回帖 0
注册时间 2020-10-21
|
本帖最后由 冰箱研会长e-3M 于 2020-11-10 09:51 编辑
Win10 2004 UTF8模式下直接使用mecab cli会出现的情况:
mecab无法正确接收英文字母和数字以外的字符。
- 注: powershell环境
- [Console]::OutputEncoding = [System.Text.Encoding]::UTF8;
- [Console]::InputEncoding = [System.Text.Encoding]::UTF8;
复制代码
这个问题, 我在中文网络英文网络日文网络都没找到好的解决方案,
反正mecabdll的工作情况是正常的, 对于开发工作而言想必不是什么大问题.
这里主要是为了直接在cli使用mecab.
这个问题很明显是console传递文字的机制的问题,
以往和ffprobe/mediainfo战斗的经验告诉我这类问题要么无解, 要么解得献祭个一天两天的时间和自己的好心情.
所幸mecab有直接读取输出到文件的io模式, 那就可以用powershell来实现一个 "绕路" workaround.
这里简单记录一下, 以防其他像我这样没有技术的人被迫在WSL里用mecab.
GITHUB
原理没什么好说的, 就是把文字输入到临时文件里做中专而已, 是相当没有意义的代码.
- function mmecab{
- param (
- [string]$InputString
- )
- Set-Content -LiteralPath "$($PWD)/temp.txt" -Value $InputString;
- mecab "$($PWD)/temp.txt" -o "$($PWD)/temp-output.txt";
- Get-Content -LiteralPath "$($PWD)/temp-output.txt";
- Remove-Item -LiteralPath "$($PWD)/temp.txt";
- Remove-Item -LiteralPath "$($PWD)/temp-output.txt";
- }
复制代码
基于同样的原理, 那使用pipline代替临时文件也是可能的.
于是只需要
- echo "文字" | mecab
- #echo 是 Write-Output的别名
复制代码 也可以实现一致的效果, 总之, 只要回避从命令行直接对mecab输入文字, 把这个过程抛给shell就可以解决 "文字化け" 现象.
经过以上设置, 可以获得正确的输出.
以上.
|
|