Android TTS说0为"哦"

nve*_*eek 6 android

当使用Android TextToSpeech讲有数字的消息时,Android会将0(零)称为"哦"而不是"零".所有其他数字按预期说出.

我尝试了几种不同的发言方式,所有这些都导致了这个问题.首先,我以正常的方式尝试:

    mTTS = new TextToSpeech(mContext, this);
    String text= "this is a test";
    String digits=  "0 0 0 1";
    String finalString= text+digits;

    // speak something using google TTS
    Bundle lParams = new Bundle();
    lParams.putInt(TextToSpeech.Engine.KEY_PARAM_STREAM, Constants.TTS_AUDIO_STREAM);
    mTTS.speak(finalString, TextToSpeech.QUEUE_FLUSH, lParams, "");
Run Code Online (Sandbox Code Playgroud)

我也试过digits"0001"(没有空格).最后两人都说"这是一个考验哦哦哦哦".接下来,我尝试使用TtsSpans:

    mTTS = new TextToSpeech(mContext, this);
    String text= "this is a test";
    String digits=  "0 0 0 1";
    String finalString= text+digits;
    Spannable lSpannedMsg = new SpannableString( finalString );
    TtsSpan lSpan = new TtsSpan.DigitsBuilder(digits).build();
    TtsSpan lSpanText = new TtsSpan.TextBuilder(text).build();

    lSpannedMsg.setSpan(lSpan, finalString.indexOf(digits), finalString.indexOf(digits) + digits.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    lSpannedMsg.setSpan(lSpanText, finalString.indexOf(text), finalString.indexOf(text) + text.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    // speak something using google TTS
    Bundle lParams = new Bundle();
    lParams.putInt(TextToSpeech.Engine.KEY_PARAM_STREAM, Constants.TTS_AUDIO_STREAM);
    mTTS.speak(lSpannedMsg, TextToSpeech.QUEUE_FLUSH, lParams, "");
Run Code Online (Sandbox Code Playgroud)

即使使用跨越的弦,引擎仍然说"这是一个测试哦哦哦哦一个".有没有办法迫使谷歌说0为"零"?我想避免调查发送的字符串并用"零"替换0,因为这会导致其他语言出现问题.

小智 0

holder.mEmployeeId.setText("100001");
String buildNumber = holder.mEmployeeId.getText().toString();
StringBuilder builderForEmployeeNo = new StringBuilder();
for (char ch : buildNumber.toCharArray()){
    builderForEmployeeNo.append(ch);
    builderForEmployeeNo.append(",");
}
holder.mEmployeeId.setContentDescription(builderForEmployeeNo);
Run Code Online (Sandbox Code Playgroud)

通过使用此方法,无论您的默认区域设置如何,它都只会将 0 读作零