返回列表 发帖

[完成]20元求unicode的汉字和拼音

本帖最后由 lxh623 于 2020-7-1 08:38 编辑

昨天求到了从xml取得unicode,还是没有汉字和拼音。比如:
U+3B88
U+200F5
U+4ACC
U+28DF2

想到一个办法,从网站搜索。http://www.unicode.org/charts/unihan.html,例如,https://www.unicode.org/cgi-bin/ ... ?codepoint=U%2B3B88
Your Browser是文字。kMandarin是拼音,这一个可能不一定有。
我把所有的unicode码写入文本a(UTF8或者ansi)。一行一个。
做成excel,第一行是unicode,第二行是文字,第三行是拼音。(编码最好unicode)

不知道还有别的办法没有。

谢谢!

[attach]12631[/attach][attach]12632[/attach]
1

评分人数

提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

本帖最后由 lxh623 于 2020-6-24 09:08 编辑

回复 2# zaqmlp
谢谢!
有个新的想法。这个网站很慢。下载资料也是,但是,迅雷还好。
批处理怎么设置多线程。谢谢!
不行的话,就算了!

TOP

回复 1# lxh623


  完整的xml有吗?

TOP

回复 4# netdzb
百度云有cbreader或者Cbeta2016。

TOP

本帖最后由 went 于 2020-6-25 10:58 编辑

了解下powershell的多线程
存为bat,ANSI编码
测试了下线程太多容易卡死,建议只开5个线程
@powershell -c "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" &pause&exit
#参数
$unicodeFile="C:\Users\lenovo\Desktop\a.txt"; #unicode文件路径
$saveFile="C:\Users\lenovo\Desktop\data.csv"; #保存的csv文件路径
$maxThreadCount=5; #最大线程
if((Test-Path $saveFile)){Remove-Item -Path $saveFile}
#任务脚本
$queryJob={
    param($unicode="")
    if($unicode -eq ""){return;}
    $word="";$kMandarin=""
    $ie=New-Object -ComObject "InternetExplorer.Application";
$ie.Visible=$false;
    $ie.Navigate("https://www.unicode.org/cgi-bin/GetUnihanData.pl?codepoint="+$unicode);
    while($ie.Busy){Start-Sleep -Seconds 1}
    $text=$ie.Document.querySelector("body").innerText;
    if($text -match "Your Browser\s*(\S*?)\s"){$word=$Matches[1]}
    if($text -match "kMandarin\s*(\S*?)\s"){$kMandarin=$Matches[1]}
    $ie.Quit();
    return $unicode+","+$word+","+$kMandarin;
}
#设置线程池
$pool=[runspacefactory]::CreateRunspacePool(1,$maxThreadCount);
$pool.Open(); #打开线程池
$threads=New-Object "System.Collections.ArrayList"; #线程集
$results=New-Object "System.Collections.ArrayList"; #结果集
#开始创建线程
Get-Content $unicodeFile | Select-Object -Unique | foreach {
    Write-Host ("添加任务:{0}" -f $_);
    $thread=[powershell]::Create(); #新建线程
    $thread.RunspacePool=$pool; #设置线程池
    [void]$thread.AddScript($queryJob); #任务脚本
    [void]$thread.AddArgument($_.Trim()); #任务参数
    [void]$threads.Add($thread); #保存线程
    [void]$results.Add($thread.BeginInvoke()); #保存结果
}
Write-Host "任务全部创建完成!`n"
#监视线程状态,1秒更新一次
$datas=New-Object "System.Collections.ArrayList";
$count=0;
while($true){
    $allDone=$true;
    for($i=0;$i -lt $results.Count;$i++){
        if($results[$i] -ne $null){
            if($results[$i].IsCompleted){
                $data=$threads[$i].EndInvoke($results[$i])[0];
                Write-Host ("{0} 任务完成" -f $data);
                [void]$datas.Add($data);
                $threads[$i].Dispose();
                $threads[$i]=$null;
                $results[$i]=$null;
                $count++;
                [System.Console]::Title="进度:{0}/{1} " -f $count,$threads.Count;
            } else {
                $allDone=$false;
            }
        }
    }
    if($allDone){break};
    Start-Sleep -Seconds 1
}
Write-Host "任务全部完成!`n"
#写入文件
$datas | Out-String | Out-File $saveFile -Encoding unicode
Write-Host ("已写入文件: {0}" -f $saveFile);
#关闭线程池
$pool.Close(); COPY
1

评分人数

TOP

回复 6# went
这个在哪里修改线程?
要是不打开浏览器,就更好了。

TOP

回复 7# lxh623
改第5行

TOP

回复 8# went
请问,支付宝帐号。谢谢!

TOP

回复 3# lxh623


不是发了2种吗,用2.bat不行么
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

回复 9# lxh623
点我头像

TOP

回复 11# went
请查收!

TOP

返回列表