Takamoto has asked for the wisdom of the Perl Monks concerning the following question:

Dear monks

I use SAPI.SpVoice through Win32::OLE to read aloud string of texts. This works fine with most languages, but I fail with Japanese. Probably there must be something with an encoding option in Win:32::OLE I am missing. On my Windows 10 PC the Japanese voice (Microsoft Haruka Desktop) is installed and the voice pronouces well if I use it with other applications. Not with my script (no Idea what it is pronouncing). Note that in the example I put "Hello" (こんにちは; Kon'nichiwa; I am not able to put the Japanese word in the code below, sorry) in Japanese for easy replication. Any idea?

use strict; use warnings; use Win32::OLE; use utf8; my $tts = Win32::OLE->new("SAPI.SpVoice"); $tts->{voice} = $tts->GetVoices()->Item(3); $tts->Speak("こんにちは");

Replies are listed 'Best First'.
Re: Win32::OLE SAPI.SpVoice Japanese
by Takamoto (Monk) on Nov 26, 2019 at 12:09 UTC

    As sometimes happens, I found myself the answer after a few minutes. Using the following solves the problem:

    use Win32::OLE 'CP_UTF8'; $Win32::OLE::CP = CP_UTF8;