Евро конвертация символов JNA - PullRequest
3 голосов
/ 21 марта 2011

Я пытаюсь поместить символ евро в строку Java, которая передается встроенной функции (с использованием JNA) следующим образом:

/*JAVA*/
String s= new String("Euro symbol=€");

nativefunction(s.getBytes(US-ASCII));


/*C++*/
void nativefunction(char *s)
{
    printf("%s",s);
}

Вывод собственной функции: Euro symbol=?

Почему символ печатается как ? вместо .

Я также пытался использовать ascii-код символа евро (\0x80), но результат тот же.

Ответы [ 2 ]

4 голосов
/ 21 марта 2011

US-ASCII не содержит символа евро. Возможно, вы имели в виду Windows-1252, если это так, используйте:

nativefunction(s.getBytes("Windows-1252")); 

Если это все еще не работает, попробуйте использовать escape-последовательность Unicode в коде Java:

String s= new String("Euro symbol=\u20ac");  

Если он работает для \u20ac, но не работает для , необходимо настроить кодировку исходного кода.

0 голосов
/ 21 марта 2011

Внутренне Java кодирует строки в UTF-16, который использует два байта для каждого символа.Кодовая точка UTF для ЗНАКА ЕВРО - это U + 20AC, что составляет 0x20AC в кодировке UTF-16.US-ASCII использует один байт для каждого символа.Поскольку знак евро не может быть представлен в США ascii, кодировщик заменяет этот знак знаком вопроса.Читайте об этом в документации CharSetEncoder.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...