В итоге сделал так:
С сервера имя отправляю через URLEncoder, в struts добавил параметр
filename*="utf8'ru-ru'${fileName}"
.
Так нормально имя понимает FireFox.
Ещё через атрибут
download
Указываю имя файла в ссылке, так понимает Chrome.
Осталась одна проблема: IE...