"â<80><98>"은 무엇이며 이를 방지하는 방법은 무엇입니까?

"â<80><98>"은 무엇이며 이를 방지하는 방법은 무엇입니까?

내가 하나 만들었어

cd /folder/ && find . -not \( -path ./exclude_folder -prune \) > /log.log

그리고 얻다

find: â<80><98>./qs/www/ergebnisse/validitaet/0df21b8a-e227-47b2-aaa5-9f54d1f9b8fd.txtâ<80><99>: No such file or directory

내부 로그 파일. 사실이지만:

이것은 무엇 â<80><98>입니까 â<80><99>? 이게 색상 코드인가요? 그것들을 피하는 방법( find아무것도 없음 --no-color)?


기다리다. cat log.log대신 이 작업을 수행하면 다음과 같은 vi log.log결과를 얻습니다.

find: ‘./qs/www/ergebnisse/validitaet/0df21b8a-e227-47b2-aaa5-9f54d1f9b8fd.txt’: No such file or directory

답변1

배포판에서는 UTF-8 문자 인코딩을 사용합니다. 이는 대부분의 최신 배포판에서 정상입니다.
당신이 보는 것은 UTF-8로 인코딩된 문자가 다른 인코딩에 나타나는 효과입니다.

많은 GNU 유틸리티는 여는 따옴표와 닫는 따옴표를 나타내기 위해 서로 다른 따옴표를 사용하려고 합니다. 이는 일부 글꼴에는 좋아 보이지만 다른 글꼴에는 좋지 않습니다.

생성된 출력을 살펴보겠습니다 find.

$ find /x 2>&1 | hexdump -C
00000000  66 69 6e 64 3a 20 e2 80  98 2f 78 e2 80 99 3a 20  |find: .../x...: |

전후에 /x시퀀스 e2 80 98합계가 있습니다 e2 80 99.

콘솔은 UTF-8로 구성되어 있으며 UTF-8 시퀀스를 올바르게 표시합니다. 프로그램은 cat이 순서를 인식하거나 신경쓰지 않으므로 문제가 되지 않습니다.

반면에 vi파일을 latin1로 해석합니다. 이것은 적어도 현대 배포판에서는 드문 일입니다. latin1에서 첫 번째 바이트 는 while e2으로 해석되고 , latin1에서는 유효하지 않으며 다음과 같이 표시됩니다 . 그 결과는 다음과 같습니다.â809899<80>â<80><98>â<80><99>

이 상황을 피하는 방법은 무엇입니까? vi파일을 UTF-8로 표시하거나 출력에서 ​​UTF-8 시퀀스를 사용하지 않도록 파일을 구성할 수 있습니다 .

$ LC_CTYPE=C find /x 2>&1 | hexdump -C
00000000  66 69 6e 64 3a 20 27 2f  78 27 3a 20   |find: '/x': |

UTF-8 시퀀스를 생성하는 대신 작은따옴표가 여는 따옴표와 닫는 따옴표로 find사용됩니다 .'

UTF8을 비활성화하면 프로그램이 입력을 처리하는 방식이 변경될 수 있지만 귀하의 예에서는 이것이 중요하지 않습니다.

답변2

시작코드와 종료코드입니다.

â<80><98> = ‘
â<80><99> = ’

관련 정보