This may be a file system problem. What are you copying from? If it is a Windows-type file system, are you aware of the --locale and -L options on the various FAT- and NTFS-style mount commands? If it is a Unix-type file system, on what locale were the file names written?
Also, when you say "FreeBSD replaces these characters with just dot", are you sure that this is binary replacement (the string returned from the readdir() system call contains character 0x2E = "." In the place you expect), or is it a rendering problem of whatever terminal you use? Can you read the file names (for example with a small perl or python script or C program) and dump them in hex? Here is an idea: "LANG=C ls -1 > /tmp/foo", followed by "hexdump -C /tmp/foo". You will see the binary representation of the file names, which allows you to debug what's really going on.