【发布时间】:2019-06-13 20:02:52
【问题描述】:
我已经下载了IVR for beginners tutorial 并对其进行了一些修改以提供俄语语音响应(java 文件的编码是 UTF-8):
@Override
protected void doPost(HttpServletRequest servletRequest, HttpServletResponse servletResponse)
throws IOException {
VoiceResponse response = new VoiceResponse.Builder()
.gather(new Gather.Builder()
.action("/menu/show")
.numDigits(1)
.build())
.say(new Say.Builder("Привет")
.voice(Say.Voice.ALICE)
.language(Say.Language.RU_RU)
.build())
.build();
servletResponse.setContentType("text/xml");
try {
servletResponse.getWriter().write(response.toXml());
} catch (TwiMLException e) {
throw new RuntimeException(e);
}
}
但是,当我拨打我的号码时,我听到了静音。控制台的通话记录显示问号而不是西里尔字符。
如果能帮助我解决这个问题,我将不胜感激。
【问题讨论】:
-
请“尝试”在响应中显式设置字符集(UTF8)......也许更喜欢“application/xml”到“text/xml”(以前暗示 ASCII see ) ...如果您有记录器(并相信它的 utf-8 功能:),请记录
response.toXml().. -
感谢@xerx593 的反馈。尝试过的应用程序/xml - 相同。 Logger.getLogger(Logger.GLOBAL_LOGGER_NAME).log(Level.WARNING, response.toXml()) 打印预期的俄语字符串(Mac OS 终端)。但有些事情我不明白:我正在使用来自Byte Encodings and Strings 的 printBytes() 方法打印字符代码并得到以下信息:
0xd0 0x9f 0xd1 0x80 0xd0 0xb8 0xd0 0xb2 0xd0 0xb5 0xd1 0x82(对于“Привет”应该是0x04 0x1F 0x04 0x40 0x04 0x38 0x04 0x32 0x04 0x35 0x04 0x42) -
字节没问题! (您的期望是 utf16 ...fileformat.info/info/unicode/char/041f/index.htm),但是您:
servletResponse.setCharacterEncoding("UTF8");? (或等效的..stackoverflow.com/a/1849080/592355) -
P.S.将响应的内容类型恢复为
text/xml- 仍然可以正常工作。 IE。这是响应的编码。
标签: java twilio twilio-api