[질문]탐색기에선 잘나오는데 다른프로그램에선 파일명이 깨질때

redpig의 이미지

안녕하세요.
탐색기에선 파일명이 제대로 나오는데 다른 프로그램..
예를들어 cmd창이나 ftp 프로그램에선 파일명중 일부 글자가 ?로 깨져서 나옵니다.
그래서 깨지는 글자를 다른 모든 프로그램에서도 제대로 보이는 글자로 치환하든가 아님 그게 힘들면 해당 글자만 없애고 파일명을 바꿔버리고자 합니다.
이거때문에 이틀동안 매달렸는데 도저히 답이 안보이네요..
탐색기에서 일일이 깨지는 글자를 찾아서 파일명을 바꾸면 되긴 하지만 이런 노가다를 않하려고 프로그램으로 만들려고 합니다.
그럼 답변 부탁드리구요..답변에 미리 감사드립니다. :D

lifthrasiir의 이미지

redpig wrote:
안녕하세요.
탐색기에선 파일명이 제대로 나오는데 다른 프로그램..
예를들어 cmd창이나 ftp 프로그램에선 파일명중 일부 글자가 ?로 깨져서 나옵니다.
그래서 깨지는 글자를 다른 모든 프로그램에서도 제대로 보이는 글자로 치환하든가 아님 그게 힘들면 해당 글자만 없애고 파일명을 바꿔버리고자 합니다.
이거때문에 이틀동안 매달렸는데 도저히 답이 안보이네요..
탐색기에서 일일이 깨지는 글자를 찾아서 파일명을 바꾸면 되긴 하지만 이런 노가다를 않하려고 프로그램으로 만들려고 합니다.
그럼 답변 부탁드리구요..답변에 미리 감사드립니다. :D

아마 파일 이름이 유니코드로 되어 있으면서 시스템의 기본 인코딩에서 사용할 수 없는 문자일 때 그런 식으로 나올 겁니다. (저 같은 경우 일본어 파일 이름으로 된 것들이 맨날 그래서 속 터지는 줄 알았습니다)

제가 win32 api를 잘 아는 게 아니라서 확실한 지는 모르겠으나, FindFirstFileW, FindNextFileW, FindClose 같은 함수로 실제 파일 이름을 받아 오시고 적절한 처리를 하신 뒤 MoveFileW 함수로 원하는 파일 이름으로 바꾸시면 될 듯 합니다. 물론 유니코드 버전으로 빌드하셔야 할 것이고요.

- 토끼군

덤: 참고로 일본어 파일 이름이 깨지는 거라고 하신다면 현재 시스템에서 제대로 나오는 파일 이름으로 바꾸는 것도 그렇게 쉬운 일은 아니더군요. 저 같은 경우 Unihan Database에서 대체 글자를 찾아 보곤 했습니다.

익명 사용자의 이미지

tokigun wrote:

아마 파일 이름이 유니코드로 되어 있으면서 시스템의 기본 인코딩에서 사용할 수 없는 문자일 때 그런 식으로 나올 겁니다. (저 같은 경우 일본어 파일 이름으로 된 것들이 맨날 그래서 속 터지는 줄 알았습니다)

제가 win32 api를 잘 아는 게 아니라서 확실한 지는 모르겠으나, FindFirstFileW, FindNextFileW, FindClose 같은 함수로 실제 파일 이름을 받아 오시고 적절한 처리를 하신 뒤 MoveFileW 함수로 원하는 파일 이름으로 바꾸시면 될 듯 합니다. 물론 유니코드 버전으로 빌드하셔야 할 것이고요.

- 토끼군

덤: 참고로 일본어 파일 이름이 깨지는 거라고 하신다면 현재 시스템에서 제대로 나오는 파일 이름으로 바꾸는 것도 그렇게 쉬운 일은 아니더군요. 저 같은 경우 Unihan Database에서 대체 글자를 찾아 보곤 했습니다.

답변 감사합니다. :D
네..말씀하신데로 일본어 파일명입니다.
답변주신건 생각하고 있었지만 뭔가 방법이 있지 않을까 싶어 iconv나 유니코드 관련해서 삽질하다 결국 포기하고 답변해주신 방법으로 해결했습니다.
뭐 완전히 해결한건 아니구 깨지는 글자를 그냥 x로 바꿔버렸지만요..
유니코드 파일명을 멀티바이트로 바꿨을때 2바이트중에 '\x3f'(이게 아스키코드의 '?'에 해당하더군요)가 들어가 있으면 깨지더군요.
암튼 답변 주셔서 다시한번 감사드립니다. :)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.