Добавьте _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on'
в ваш файл /etc/environment
.
Если вы запускаете Java-приложения из консоли, добавьте export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on'
к вашему .bashrc
(, если вы используете оболочку bash ), или .zshrc
(, если вы запускаете Z-оболочку ).
Выйдите из системы и войдите снова.
POSIXly:
od -An -vtu1 < file > file.encoded
Где каждый и v
каждый байт файла кодируется как u
десятичное число без знака с n
или A
адресом.
Для декодирования с некоторыми awk
реализациями (такими, как gawk
или mawk
, где printf("%c", 0)
работает):
awk '{for (i = 1; i <= NF; i++) printf "%c", $i}' < file.encoded > file
Несколько замечаний о том, почему ваш подход не работает:
zsh
, не могут хранить произвольные данные (, особенно байт NUL )в своей переменной. zsh
${var:offset:length}
ksh93
(ksh93
, bash
, zsh
, mksh
), offset
и length
выражаются в количестве символов, а не в байтах (UTF -8 однако является единственной многобайтовой -кодировкой символов, поддерживаемой mksh
и только при включенной опции utf8-mode
). printf %d \'x
возвращает номер кода символа.Это только значение байта в однобайтовых наборах символов -. Здесь вы, вероятно, используете bash
и находитесь в локали, использующей кодировку UTF -8, посколькуbash
printf
дает случайные значения для байтов, не являющихся частью допустимых символов там . LINE_MAX
(, см.getconf LINE_MAX
)и разделяются символом новой строки. Таким образом, за исключением очень маленьких файлов jpg, ваш sai.out
в конечном итоге не будет действительным текстом, и у вас не будет никакой гарантии, что он будет нормально обработан текстовыми утилитами.(od
здесь выводит только несколько чисел в строке ). Если hex является допустимым целочисленным представлением, xxd сделает всю работу за вас:
xxd -p image.jpg > image.hex
И, чтобы вернуться к изображению:
xxd -p -r image.hex > image-copy.jpg
Мой ответ основан на подсказке Стрелы. Я не эксперт в sed
, поэтому я верю в лучшее решение, чем это, но пока оно работает.
Стратегия заключалась в том, чтобы преобразовать мой файл в шестнадцатеричный с помощью xxd
, а затем преобразовать шестнадцатеричный в целочисленный.
Кодировать:
xxd -p $1 | sed 's/.\{2\}/& /g' | sed 's/[^ ]* */0x&/g' | awk '{ for(i=1;i<=NF;i++) printf("%i ",$i); print ""; }' > $2
Декодировать:
awk '{ for(i=1;i<=NF;i++) printf("%02x ",$i); print ""; }' $IN > $OUT
xxd -p -r $OUT $OUT_IMAGE_NAME.jpg
rm $OUT